Autor | Zpráva | ||
---|---|---|---|
Taps Profil |
#1 · Zasláno: 8. 4. 2010, 12:38:35
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 |
#2 · Zasláno: 8. 4. 2010, 13:49:35
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; encodeURIComponent(str) místo str .
|
||
imploder Profil |
#3 · Zasláno: 8. 4. 2010, 14:28:12
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 |
#4 · Zasláno: 8. 4. 2010, 15:50:04
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 |
#5 · Zasláno: 8. 4. 2010, 17:04:10 · Upravil/a: imploder
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 |
#6 · Zasláno: 8. 4. 2010, 17:11:58
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 |
#7 · Zasláno: 8. 4. 2010, 17:30:57
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. |
||
Časová prodleva: 15 let
|
0