ű és ő karakterek kódolása és továbbítása hálózaton
Van egy WP plugin, amit már nem fejlesztenek, így a készítő se foglalkozik a problémámmal.
A hiba csak az őŐűŰ karaktereket érinti.
Kliens oldalon a következő karaktereket adom be:jQuery .val()-al kiveszi az értéket majd egy escape() után jQuery.post()-al az egész tömböt elküldi.
A karaktersorozat ekkor már így néz ki: (FireBug szerint)
post application/x-www-form-urlencoded:A szerver oldalon PHP $_POST-al leveszi, majd ezzel a két fgv-el kikódolja:
urldecode()
htmlentities()
Ezután több függvényen, osztályon, felületen áthaladva végül előkészíti a mentésre:
serialize()
addslashes()
Ami az adatbázisban már így néz ki.Betöltéskor visszakódolja:
stripslashes()
unserialize()
Majd átalakítja az újsor karaktereket html sortörésre:
nl2br()
A tömböt json formátumra alakítja.
array_to_json()
Majd két script tag közt egy jQuery fgv-nek átadva visszaküldi a kliensnek.
echo <script>jQuery(selector).imgNotes(json,...)</script>
Itt nemtom merre tovább, de a képernyőn végül ez jelenik meg:Mint látható, csak az őŐűŰ karakterekkel van gond.
A WP admin felületen a FireFox szerint UTF8 kódolás van.
A
szerint a WP karakterkészlet is UTF8
Az adatbázis utf8_general_ci (de utf8_hungarian_ci-vel se láttam különbséget)
Ékezetes karaktereket közvetlenül beleírva gond nélkül eltárol.
Ekkor kipróbáltam, hogy a WP egyáltalán mit kezd az ékezetes karakterekkel.
Ha az admin felületen mentem el az eredeti karaktersorozatot, akkor az így kerül tárolásra az adatbázisban:Véleményem szerint a következő fgv-ekkel kéne valamit csinálni.
escape()
urldecode()
htmlentities()
Másik leírásokból kiindulva:
escape() helyett próbáltam encodeURI()-t, ekkor FireBug szerint ezt küldi a szervernek:htmlentities() helyett próbáltam htmlspecialchars()-ot
kísérleteztem decodeURI(), decodeURIComponent(), encodeURI(), encodeURIComponent() fgv-ekkel is
Mindenféle ötletet szívesen veszek.
■ A hiba csak az őŐűŰ karaktereket érinti.
Kliens oldalon a következő karaktereket adom be:
ÁáÉéÍíÓóÖöŐőÜüŰű
A karaktersorozat ekkor már így néz ki: (FireBug szerint)
post application/x-www-form-urlencoded:
%C1%E1%C9%E9%CD%ED%D3%F3%D6%F6%u0150%u0151%DC%FC%u0170%u0171
urldecode()
htmlentities()
Ezután több függvényen, osztályon, felületen áthaladva végül előkészíti a mentésre:
serialize()
addslashes()
Ami az adatbázisban már így néz ki.
ÁáÉéÍíÓóÖö%u0150%u0151Üü%u0170%u0171
stripslashes()
unserialize()
Majd átalakítja az újsor karaktereket html sortörésre:
nl2br()
A tömböt json formátumra alakítja.
array_to_json()
Majd két script tag közt egy jQuery fgv-nek átadva visszaküldi a kliensnek.
echo <script>jQuery(selector).imgNotes(json,...)</script>
Itt nemtom merre tovább, de a képernyőn végül ez jelenik meg:
ÁáÉéÍíÓóÖö%u0150%u0151Üü%u0170%u0171
A WP admin felületen a FireFox szerint UTF8 kódolás van.
A
get_option('blog_charset');
szerint a WP karakterkészlet is UTF8
Az adatbázis utf8_general_ci (de utf8_hungarian_ci-vel se láttam különbséget)
Ékezetes karaktereket közvetlenül beleírva gond nélkül eltárol.
Ekkor kipróbáltam, hogy a WP egyáltalán mit kezd az ékezetes karakterekkel.
Ha az admin felületen mentem el az eredeti karaktersorozatot, akkor az így kerül tárolásra az adatbázisban:
ÁáÉéÍíÓóÖöŐőÜüŰű
escape()
urldecode()
htmlentities()
Másik leírásokból kiindulva:
escape() helyett próbáltam encodeURI()-t, ekkor FireBug szerint ezt küldi a szervernek:
%C3%81%C3%A1%C3%89%C3%A9%C3%8D%C3%AD%C3%93%C3%B3%C3%96%C3%B6%C5%90%C5%91%C3%9C%C3%BC%C5%B0%C5%B1
kísérleteztem decodeURI(), decodeURIComponent(), encodeURI(), encodeURIComponent() fgv-ekkel is
Mindenféle ötletet szívesen veszek.
UTF-8
siker
JavaScript oldalon az escape helyett használtam az általad említett encodeURIComponent fgv.-t, PHP oldalon meg csak egy urldecode kell. (htmlentities-re nincs szükség)
A kód többi részén nem kellett változtatnom.
A jelzett karaktereknek eleve
A htmlentities() függvényre mi szükség van?
adatbázisba írás előtt minek az addslashes()? Milyen adatbázist használsz?
pp
más plugin
adatbázis:
WinXP/XAMPP, minden UTF8