Autor Zpráva
Taps
Profil
Zdravím, chci použít našeptávač který je dostupný na
http://www.w3schools.com/php/php_ajax_suggest.asp. Problém však nastává když
chci vyhledávat slova s diakritikou. Je zajímavé že problém je v IE, ve firefoxu vše funguje v pořádku.

Mohl by mi někdo poradit co s tím.
děkuji
Chamurappi
Profil
Reaguji na Tapse:
Nedoporučuji důvěřovat čemukoliv na W3Schools.com, jsou tam mraky chyb.

Konkrétně v tomto skriptu se autor vykašlal na jakékoliv ošetřování vstupu:
url=url+"?q="+str;
Použij encodeURIComponent(str) místo str.
imploder
Profil
Taps:
Jak radí Chamurappi, text odesílaný přes HTTP GET je potřeba kvůli IE v javascriptu zakódovat. Dá se použít [ http://www.webtoolkit.info/javascript-url-decode-encode.html ], ale to chamurappiho bude lepší, protože je už přímo v prohlížeči (nemusí se načítat žádný další JS).

Do index.php patří hlavička určující kódování (UTF-8):
<meta http-equiv="content-type" content="text/html; charset=utf-8">


Na straně serveru (gethint.php) jsem ještě změnil:
- přidal jsem jméno Šůběrťáďa
- $_GET['q'] se prožene funkcí urldecode(), aby se rozkódoval
- strtolower() jsem změnil na mb_strtolower(), aby se zmenšení písmen fungovalo i na vícebajtové znaky v UTF-8 (jako třeba š)

Výsledek: naseptavac.zip
Jméno Šůběrťáďa funguje, bez ohledu na velikost písmen (stejně jako ostatní jména).
Chamurappi
Profil
Reaguji na implodera:
text odesílaný přes HTTP GET je potřeba kvůli IE v javascriptu zakódovat
Je potřeba ho zakódovat zejména proto, že to je normální postup zapouzdření dat. (I když z „URL injection“ žádná velká rizika nekoukají.)

Dá se použít […]
Ignoruje &, pokud dobře čtu.

$_GET['q'] se prožene funkcí urldecode(), aby se rozkódoval
Ono to snad PHP neumí samo od sebe?
imploder
Profil
Chamurappi:
Je to tak, ignoruje &, v IE pro &neco nenašeptává, ve FF ano, ale tam zřejmě nevadí, když se to v JS nezakóduje.
Zkusil jsem encodeURIComponent - chová se stejně, taky & nezakóduje a v IE pro &neco nenašeptává.

„$_GET['q'] se prožene funkcí urldecode(), aby se rozkódoval“
Ono to snad PHP neumí samo od sebe?
Rozkóduje to samo, máš pravdu. Urldecode() by se muselo volat jenom při získávání hodnoty přímo z řetězce URL.

upravená verze (bez urldecode, s URIComponent): naseptavac2.zip
Chamurappi
Profil
Reaguji na implodera:
v IE pro &neco nenašeptává, ve FF ano
To nějak nedává smysl, ne? Dáš-li do adresy za název souboru ?q=&neco, tak je v q nic a neco bude vnímáno jako další parametr — na to nemůže mít vliv prohlížeč.

Zkusil jsem encodeURIComponent - chová se stejně, taky & nezakóduje
Tak jsi ho nejspíš zkoušel špatně, tohle je jeho primární účel (tím se odlišuje od encodeURI).
imploder
Profil
Chamurappi:
To nějak nedává smysl, ne? Dáš-li do adresy za název souboru ?q=&neco, tak je v q nic a neco bude vnímáno jako další parametr — na to nemůže mít vliv prohlížeč.
Ve FF i v IE8 encodeURIComponent zakóduje & jako %26, takže by to mělo být stejné. IE ale narozdíl of FF na &neco nenašeptává, takže je tam v IE nějaký jiný problém.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0