ugrás a tartalomhoz

URL dekódolás vegyes inputnál

pkadam · 2012. Feb. 6. (H), 18.00
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 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
 
1

mb_detect_encoding ?

tgr · 2012. Feb. 7. (K), 00.08
mb_detect_encoding ? Jellemzően még csak nem is a böngészőtől függ, hanem beállításoktól, nyelvtől, széljárástól, bármitől; másrészt viszont nagyon pechesnek kell lenned ahhoz, hogy az ISO-8859-x string UTF-8-nak tűnjön, szóval egyszerűen meg kell nézni, hogy valid UTF-8-e, és ha nem az, akkor iconv()-olni.