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.”

  1. Atesz  on July 20th, 2009

    Úúú tényleg, köszi hogy leírtad :D véletlenül elfelejtettem hogy így is lehet. XD

  2. 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”);

  3. Varga Péter  on December 4th, 2009

    Köszi a kiegészítést! ;)

  4. grof  on January 8th, 2010

    miért az explode? plusz erőforrás..

    $mit = array(’á’, ‘é’…
    $mire = array(’a', ‘e’…

  5. 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?

  6. 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;

  7. 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”);


Leave a Reply