PHP Ékezetes karakterek eltávolítása UTF8 alatt.
Ha UTF-8 kódolást használunk (én mással nem is bajlódok), belefuthatunk abba a hibába, hogy az strstr() php függvény nem működik helyesen. A függvény feladata az lenne, hogy a felsorolt ékezetes karaktereket ékezet nélkülire konvertálja. Ennek az az oka, hogy utf8 alatt az egyes karakterek hossza nem egyezik meg a lecserélendőével. A függvény pedig pontosan ott keresi a felsorolásban a helyettesítő karaktert, ahol a lecserélendőkben találta. Sajnos ez a fv. alkalmatlan ezek után utf 8 szövegek konvertálására.
Használjuk helyette az str_repleace() függvényt!! 2db tömbbel párosítva (az egyszerűség kedvéért egy vesszővel elválasztott karaktersorozatot adunk meg, melyet explode()-függvénnyel tömbbé alakítunk) a következő képpen:
$szoveg="árvíztűrő tükörfúrógép"
$mit = explode(",","á,é,í,ő,ő,ó,ü,ű,ú");
$mire = explode(",","a,e,i,o,o,o,u,u,u");
$szoveg = str_replace($mit, $mire, $szoveg);
Ezzel a módszerrel nem fogunk hibás karaktreláncokat kapni UTF-8 kódolású oldalak esetén sem.
7 Responses to “PHP Ékezetes karakterek eltávolítása UTF8 alatt.”
Leave a Reply

Atesz on July 20th, 2009
Úúú tényleg, köszi hogy leírtad
véletlenül elfelejtettem hogy így is lehet. XD
sige on December 1st, 2009
$mit = explode(”,”,”á,é,í,ö,ő,ó,ü,ű,ú,Á,É,Í,Ö,Ő,Ó,Ü,Ű,Ú”);
$mire = explode(”,”,”a,e,i,o,o,o,u,u,u,A,E,I,O,O,O,U,U,U”);
Varga Péter on December 4th, 2009
Köszi a kiegészítést!
grof on January 8th, 2010
miért az explode? plusz erőforrás..
$mit = array(’á’, ‘é’…
$mire = array(’a', ‘e’…
nzm79 on June 14th, 2010
Szevasz! Szinte mindenütt ezt a megoldást találni erre a problémára és valszinü jónak is kellene lennie. Sajna php-t csak minimális szinten használom / ismerem. Készítettem egy teszt file-t amiben ez áll:
‘;
print $newstr;
?>
A végeredmény:
sásvásáriőrség —> sásvásáriőrség
Vissza adja az eredeti ékezetes string-et.
????
Mit hibázhattam egy ilyen kis egyszerü holminál?
nzm79 on June 14th, 2010
hoppá… az előző hozzászólásomból szinte tökéletesen hiányzik a php… ???
$mit = array(”á,é,í,ő,ő,ó,ü,ű,ú,Ö,Ü,Ó,Ő,Ú,É,Á,Ű”);
$mire = array(”a,e,i,o,o,o,u,u,u,O,U,O,O,U,E,A,U”);
$mystr = ’sásvásáriőrség’;
$newstr = str_replace($mit, $mire, $mystr);
print $mystr;
print ‘ —> ‘;
print $newstr;
nzm79 on June 15th, 2010
köszi már megoldódott:
$mit = array(”á”,”é”,”í”,”ő”,”ő”,”ó”,”ü”,”ű”,”ú”,”Ö”,”Ü”,”Ó”,”Ő”,”Ú”,”É”,”Á”,”Ű”);
$mire = array(”a”,”e”,”i”,”o”,”o”,”o”,”u”,”u”,”u”,”O”,”U”,”O”,”O”,”U”,”E”,”A”,”U”);