Autor Zpráva
Pavel Straka
Profil
Dobré odpoledne, obracím se na zkušenější s prosbou o radu.

Můj problém:
Pokouším se vložit na web jQuery našeptávač
http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/
http://jquery.bassistance.de/autocomplete/demo/ (demo)

Ten načítá data z PHP souboru (který mu vrací výsledky z databáze):
$("#suggest1").autocomplete('search.php');

Vše funguje bez problémů, až na kódování českých znaků. V PHP vždy zakóduji řetězec, který se má použít jako URL funkcí urlencode(). V tomto skriptu (knihovna jquery.autocomplete.js) jsem alternativní funkci na úrovni JavaScriptu (encodeURIComponent()) nenašel, přidal jsem ji tedy do něj a částečně úspěšně - skript search.php je nyní volán se zakódovanou řetězcem, problém je ale v tom, že PHP funkce urlencode("X") vrací jiné hodnoty než JavaScript funkce encodeURIComponent("X").
Např. urlencode("č") -> "%e8"
encodeURIComponent("č") -> "%c4%8d".

Hledal jsem na internetu a dočetl jsem se, že encodeURIComponent() "kóduje" do UTF-8. Zkusi jsem tedy ve skriptu search.php použít jednoduchý příkaz: $_GET["q"] = iconv("UTF-8", "CP1250", $_GET["q"]);, ale bezúspěšně.

Mohl by mi tedy, prosím, někdo poradit, jak, pokud uživatel zadá nějaký nepatřičný znak (diakritika apod.) ve skriptu search.php řetězec bezpečně převést?

Děkuji všem za ochotu a rady.


Zapomněl jsem v textu dodat, že skript search.php, stránka s našeptávačem a vlastně celý web je v kódování windows-1250.
Radek9
Profil
Pavel Straka:
Překonvertuj ty PHP scripty do UTF-8. Předejdeš tím v budoucnu dost problémům.
Pavel Straka
Profil
Dobře, a kdybych svůj dotaz položil: Existuje řešení krátkodobějšího charakteru?
Radek9
Profil
Pavel Straka:
Můžeš použít již tebou zmíněný iConv:
$str = "čerešničky";
$str = iConv("CP1250", "UTF-8//TRANSLIT", $str);
echo URLEncode($str);
Pavel Straka
Profil
To mi bohužel nefunguje. Myslím si, že já potřebuji opačný převod (ale ani to nefunguje).
Mám v $_GET["q"] hodnotu "%c4%8d" (UTF-8) a jde mi o to (jakýmkoliv způsobem) toto převést na "č" (CP-1250).
Radek9
Profil
Pavel Straka:
Podle mě by na tohle bylo opravdu nejlepší používat pro celý projekt UTF-8. Pokud používáš nějaký slušnější editor, tak by to mělo jít rychle převést.
Davex
Profil
Pavel Straka:
Asi jsem nepochopil, proč potřebuješ použít urlencode() v PHP. Prohlížeči snad nemusíš odesílat zakódovaná data.

Doufám, že jsem pochopil správně o co se snažíš. (JS -> AJAX request -> encodeURIComponent -> PHP -> rawurldecode() -> DB SELECT -> echo dat -> JS -> AJAX callback -> zobrazení na stránce) AJAX by měl nativně pracovat v UTF-8 a na kódování vlastní stránky by nemělo záležet.
Radek9
Profil
Davex:
na kódování vlastní stránky by nemělo záležet
To sice v tomhle případě asi úplně ne, ale stejně to je špatnej zvyk mít projekt ve více různejch kódováních. Potom se může seknout na něčem jiným, takže to radši sjednotit hned.
Davex
Profil
Radek9:
V tom souhlasím, ale při úpravě staršího webu si to vyžádá náklady navíc, které nemusí být zadavatel ochoten zaplatit.
Pavel Straka
Profil
Radek9,Davex: Nakonec se ten převod ukázal jako nejlepší řešení. Děkuju

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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