Diskuze: Čeština v PMA
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 26 zpráv z 26.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Možná jsem to špatně vysvětlil. Problém mám jenom s tím, že to není vidět česky v té databázi (v administraci). O tom příkazu "set names utf8" jsem našel, že řeší opačný problém, kdy je to v databázi dobře a špatně se to zobrazuje.
Ten příkaz tam musíš mít stejně, pravděpodobně se ti to do databáze špatně vkládá z aplikace, protože ho tam nemáš. Máš tedy rozbitá data.
MySQL má vnitřně texty vždy ve stejném kódování (asi v UTFku), to co nastavuješ v adminovi je jen porovnávání a používá se to jen když řadíš, aby to umělo českou abecedu. Když se z aplikace připojíš k DB, musíš zavolat SET NAMES, tím řekneš, v jakém kódování má aplikace s DB komunikovat. DB potom převádí odeslané/přijaté texty ze svého kódování na to vybrané.
Tvůj problém je ten, že DB posíláš v jiném kódování, že je nastaveno. Protože to v tom špatném kódování i čteš, myslíš si, že je vše v pořádku. Jenže v administraci vidíš, že je to v DB špatně uložené, nepovedl se převod na interní kódování v DB.
Aha, už v tom začínám mít jasněji. Díky.
Bohužel se to ale chová i po úpravě pořád stejně. Ten kousek kódu
vypadá takhle:
$spojeni = mysql_connect("wm22.wedos.net","w29816_cwg","" );
mysql_select_db("d29816_cwg");
mysql_query("SET NAMES 'utf-8'");
if ($_POST[zzadani]>"") mysql_query("INSERT INTO ukol
(predmet,nakdy,zadani) VALUES
('$_POST[ppredmet]','$_POST[nnakdy]','$_POST[zzadani]')");
Bude se to chovat pořád stejně, protože máš špatně ta data. Zkus tam vložit po této úpravě nový záznam, měl by být v DB správně.
Mimochodem, máš tam SQL injekci, rychle si to oprav, než ti to někdo nabourá. Asi by sis měl přečíst zdejší tutoriály.
Nových záznamů jsem už vložil několik, bez úspěchu.
Tutoriály (mimochodem velmi srozumitelně napsané) čtu, ale nejsem ještě
tak daleko, bohužel. Zatím v db žádná potřebná data nemám...
No někde buď nevoláš SET NAMES nebo máš špatně kódování souboru/hlavičku. Jinak by to fungovalo. Můžeš si to zkusit na jediném souboru, kam dáš cvičné vložení něčeho, abys neladil celý web.
Případně si to zkus naopak, vlož si něco do databáze přes admina a potom to zkus korektně vypsat.
Data máš uložená jako UTF-8, ale snažíš se je dekódovat jako CP-1250. To znamená, že v databázi jsou zřejmě správně, ale admin konzole běží v české lokalizaci a neporadí si s tím.
Admin běží v UTFku, jinak by byl k ničemu Data má uložená sice v UTFku,
ale špatně, protože je ukládal se špatnou hlavičkou.
S tím bych normálně souhlasil, jenže ten textový výstup obsahuje znaky, které se vyskytují při kódování utf-8->1250.
Pokud by to bylo 1250->utf-8, byly by tam úplně jiné znaky. A data uložená v chybném encodingu by šla tímhle směrem.
Ta testovací data z tutoriálu vidím v db správně. Takže to asi opravdu bude v tom vstupu. Jdu si najít něco o té hlavičce...
Hurá! Nakonec pomohlo tohle:
mysql_query("SET character_set_client=utf8");
mysql_query("SET character_set_connection=utf8");
mysql_query("SET character_set_results=utf8");
Ani nevím, který z nich:)
Pokud je ta databáze nevhodně nastavená, tak se po připojení musí přidat ještě jeden řádek:
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8");
No to taky funguje, ale to už jsem tam několikrát zkoušel. Bohužel s
jinou syntaxí (někde jsem to zkopíroval): mysql_query("SET NAMES
'utf-8'");
Je to opravdu tak odlišné?
Každopádně díky za reakci.
Nepatří tam ten spojovník. Místo utf-8
má být
utf8
. Apostrofy tam být nemusí. Problém tedy není v syntaxi,
ale v chybném názvu znakové sady.
Zobrazeno 26 zpráv z 26.