URL dekódolás vegyes inputnál
Sziasztok!
Adott egy www.example.com/search/keresőszó felépítésű URL, amit az Apache rewrite-ol index.php?rewrite=/search/keresőszó formába (a weboldal UTF-8 kódolású). A keresőszó az URL manuális módosításával is megváltoztatható, ami egy ponton problémához vezet: ha tartalmaz kérdőjelet, akkor az azt követő ékezetes karakterekkel gondok vannak. Ugyanis látszólag mindhárom nagy böngésző különbözőképpen viselkedik, és a kérdőjel utáni részt eltérő kódolással "adják tovább".
A Chrome UTF-8-cal, így az
Az Internet Explorer (elvileg) ISO-8859-2-vel (a kérdőjel előtti ékezetes karakterek UTF-8-cal). És azért elvileg, mert a
A Firefox ISO-8859-2-vé alakítja a kérdőjel utáni ékezetes betűket (azt megelőzően UTF-8-cá), viszont semmilyen módon nem sikerül az URL-ből az eredeti keresőszót kinyerni. Az URL-t kiíratva "é?é" esetén "%C3%A9?%E9" az enkódolt állapot, azonban a fenti módszerek bármelyikével a "%E9" helyett az IE-nél már tapasztalt rombuszba foglalt kérdőjel jelenik meg.
Van valami ötletetek?
Előre is köszönettel,
Ádám
■ Adott egy www.example.com/search/keresőszó felépítésű URL, amit az Apache rewrite-ol index.php?rewrite=/search/keresőszó formába (a weboldal UTF-8 kódolású). A keresőszó az URL manuális módosításával is megváltoztatható, ami egy ponton problémához vezet: ha tartalmaz kérdőjelet, akkor az azt követő ékezetes karakterekkel gondok vannak. Ugyanis látszólag mindhárom nagy böngésző különbözőképpen viselkedik, és a kérdőjel utáni részt eltérő kódolással "adják tovább".
A Chrome UTF-8-cal, így az
urldecode()
sikeresen feldolgozza.Az Internet Explorer (elvileg) ISO-8859-2-vel (a kérdőjel előtti ékezetes karakterek UTF-8-cal). És azért elvileg, mert a
$_SERVER['REQUEST_URI']
-t kiíratva nem az enkódolt karakterek látszanak (mint Chrome vagy Firefox esetén), hanem az ismeretlen karaktert jelző kérdőjelek. Itt megoldja a problémát az URL-dekódolás előtti iconv()
, ISO-8859-2-ről UTF-8-ra alakítással.A Firefox ISO-8859-2-vé alakítja a kérdőjel utáni ékezetes betűket (azt megelőzően UTF-8-cá), viszont semmilyen módon nem sikerül az URL-ből az eredeti keresőszót kinyerni. Az URL-t kiíratva "é?é" esetén "%C3%A9?%E9" az enkódolt állapot, azonban a fenti módszerek bármelyikével a "%E9" helyett az IE-nél már tapasztalt rombuszba foglalt kérdőjel jelenik meg.
Van valami ötletetek?
Előre is köszönettel,
Ádám
mb_detect_encoding ?