Karakterkódolás javítás karaktercserékkel nem megy
Egy olyan oldallal talalkoztam amiben vmiert nem megy rendesen a karakterkodolas es nekem kene vmiket modositanom rajta. Az alabbi szkriptet probaltam ki (adatbazisban a kod kene), de a csere nem hajtodik vegre. Mi a hiba?
■
$char=array("Ő","ő","Ű","ű");
$code=array("Ő","ő","Ű","ű");
$subj=preg_replace($char,$code,$subj);
ez így elég kevés info..
1. miben van kódolva a script?
2. miben van kódolva az oldal?
3. mit jelent a "csere nem hajtódik végre"? Kipróbáltad, hogy más dologgal megy-e?
Ezek után talán tudok mondani valamit, mert ilyennek én is szívtam.
a replace fg-re fogom butasagom
nem csoda, hogy nem megy
preg_replace()
delimiter karaktereket vár a minta (első paraméter) elején és végén. Lásd a példákat a PHP kézikönyvben a használatáról. Egyébként adott esetben azstr_replace()
nagyon szépen használható, nem kell ágyúval verébre lőni.str_replace()
Ne nézd a neveket
A függvény neveit ne nézd teljes buták.
De amire nekem kell müködik és nem akarom bántani a motort.
karaktercsere
egy switch szerkezetben egyenként végig vizsgálja az általam megírt betukonver() függvény az input szöveget, és cserélget. Bár költséges algoritmus, 100% működik. A PHP függvények nem mindig tökéletesek!
hű
próba
multibyte?
mb_convert_encoding manual itt
de ha a gyökerekhez akarunk visszatérni, hogy nem megy a karakterkódolás, akkor egész sokféle oka lehet:
- milyen header-t küldesz php-ből a böngészőnek?
- milyen headert küld a webszerver (apache)?
- valójában milyen kódolásban kapja a böngésző az adatokat?
- milyen charset van beállítva a html-ben meta tag-nek?
- az adatok az adatbázisban hogyan vanak kódolva?
- megfelelő függvényeket használsz-e a stringek kezelésénél (pl. substr nem biztos, hogy a várt eredményt adja UTF-8-as kódolásnál)?
- használsz-e javascriptet az adatátvitelnél, vagy milyen kódolással küldi vissza a böngésző az adatokat (ajax vagy bármilyen kódolás)?
szóval ezeket szépen le kell ellenőrizni és beállítani...