Autor Zpráva
radimh
Profil
Zdravím všechny,

pomocí JavaScriptu odesílám data PHP skriptu (AJAX) metodou POST. V JavaScriptu je mj. uvedeno:

httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

Zřejmě tato řádka mi zakóduje URL do nečitelných paznaků. Když zadám háčky a čárky, nefunguje to. Do databáze se ukládají data zjevně "url zakódovaná". I když si je pomocí funkce PHPka dekóduji, do databáze se stále ukládají špatně. Co s tím?

Předem děkuji za pomoc.
Mistr
Profil
Problémy s češtinou se většinou řešily jejím kódováním (http://www.jakpsatweb.cz/cestina.html). Ovšem bude-li to správné řešení i v tomto případě, to si netroufám tvrdit.
radimh
Profil
To Mistr) Díky za odkaz. Experimentoval jsem a přitom jsem zjistil, že se data posílají v kódování UTF-8. Přitom ve stránce je nastaveno ISO 8859-2. V UTF se ukládají do databáze.

Potíž je v tom, že já potřebuji tato data ukládat v ISO 8859-2.
radimh
Profil
Možná to bude ještě někdo potřebovat, a tak vkládám své další zjištění.

Podle dokumentu W3C - 11.6 Serialization as application/x-www-form-urlencoded se data při použití této hlavičky opravdu ukládají pouze v UTF ("non-ASCII and reserved characters as amended by subsequent are escaped by replacing the character with one or more octets of the UTF-8 representation of the character").

Viz. http://www.w3.org/TR/xforms/slice11.html

Nepodařilo se mi změnit kódování z UTF na ISO před tím než data vkládám do databáze. Zkusím to tedy opačně - získat data z DB v UTF a převést je na ISO. Pokud se to nepodaří, nezbyde mi nic jiného než celý projekt překódovat do UTF.
radimh
Profil
Po pečlivém otestování všech možností mám svůj vlastní závěr. Pokud u AJAXu použijete hlavičku application/x-www-form-urlencoded, odešlou se data v UTF. Pro správné zobrazení těchto dat z databáze je potřeba, aby bylo kódování stránky a vlastně celý projekt v UTF.

Pokud by někdo náhodou zjistil, jak toto nastavení změnit a vkládat data do databáze jako ISO, budu velice vděčný za každou vaší radu.
splite
Profil
Zkuste nastavit porovnávání tabulky klidně na utf-8

a před výběrem z databáze

mysql_query("SET NAMES 'ISO-8859-2'", $spojeni);
mysql_query("SELECT * FROM");


prakticky se data nebudou jako ISO vkládat, ale vybírat ;)

(doufám že mysql označení pro ISO je tak jak jsem ho napsal, já používám pouze utf8 a ted se mi to nechce hledat...)
crash31
Profil *
tak tohle jsem nasel na foru a funguje to naprosto bezproblemu .

Co se tyce alternativnich kodovani (nejen cp1250), lze to vyresit snadno: u prijimanych dat staci nastavit HTTP hlavicku Content-type: text/html; charser=windows-1250 (nebo alternativni, pro XML data ci jina kodovani), u odesilanych dat obdobne, pred odeslanim staci nastavit HTTP hlavicku Content-Type na hodnotu napr. application/x-www-form-urlencoded; charset=windows-1250

Autor RADEK Z .
bukaj
Profil
crash31
pozdě, ale přece :)
Toto téma je uzamčeno. Odpověď nelze zaslat.