Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Chyba v diakritice na webu

Zdravím. Na webu 99 mám problém s diakritikou. Už jsem zkoušel měnit kódování v databázi, přepsat hlavičku vypisovacího souboru, i přehodit v PSPadu. A stále se ta diakritika nezobrazuje. Čím to může být?
Změna předmětu, původně: Chyba v diakritice (Kráťa)

Předmět Autor Datum
Proč máš kódování v html definované dvakrát a pokaždé jinak?
Wikan 25.02.2012 09:58
Wikan
Už jsem to opravil, ale ten web jsem neprogramoval, já jen pomáhám. Další nápady?
xJirta 25.02.2012 10:09
xJirta
Problémom je kódovanie, v ktorom komunikuješ s databázou. Keďže si myslí, že s ňou komunikuješ v kód…
los 25.02.2012 10:09
los
Na vše mám nasvavené kódování windows 1250 i vdatabázi, i ve výpisu souborů
xJirta 25.02.2012 10:24
xJirta
Očividne to tak v databáze nastavené nemáš. Aký je posledný riadok z dopytu na MySQL: show create t…
los 25.02.2012 10:36
los
show create table nazov_tabulky_z_ktorej_zobrazujes_data: ENGINE=MyISAM AUTO_INCREMENT=112 DEFAULT C…
xJirta 25.02.2012 10:43
xJirta
Máš tam UTF-8 pre komunikáciu s databázou a nie Windows-1250. Použil si tú funkciu mysql_set_charset…
los 25.02.2012 10:45
los
Zkusil bych v přenosu z db použít kodování: mysql_query("SET CHARACTER SET cp1250")or die("<br>Nelz…
ERASER 25.02.2012 10:39
ERASER
Tak jsem to tam dal a napsalo mi to: "Nelze nastavit kódování 1"
xJirta 25.02.2012 10:50
xJirta
Vypíš si chybu pomocou mysql_error, aby si zistil presný problém. Prípadne to vyskúšaj zavolať v nej…
los 25.02.2012 10:55
los
Pomocí mysql_error, mi vyjelo 0: 0:
xJirta 25.02.2012 11:03
xJirta
Skúšal si konkrétne toto? mysql_query("SET CHARACTER SET cp1250")or die(mysql_error()); Naozaj ti…
los 25.02.2012 11:22
los
Ano, vrátilo mi to 0: :0:
xJirta 25.02.2012 11:27
xJirta
Měl jsem tam překlep. Nevrátilo mi to vůbec nic
xJirta 25.02.2012 11:29
xJirta
Ak si si ten preklep nevšimol predtým, tak zrejme nemáš nastavené zobrazovanie chýb: error_reportin…
los 25.02.2012 11:45
los
:-)
xJirta 25.02.2012 12:43
xJirta
Paráda. Skús aj napísať, čo vlastne pomohlo.
los 25.02.2012 12:45
los
Až bude někdo řešit za týden totéž, odkážeme jej na toto vlákno, že stačí napsat smajla a je to vyře… poslední
Kráťa 25.02.2012 15:30
Kráťa

Problémom je kódovanie, v ktorom komunikuješ s databázou. Keďže si myslí, že s ňou komunikuješ v kódovaní, ktoré nepozná znaky s diakritikou, nahradí ich otáznikmi.

Keď použitím funkcie mysql_set_charset nastavíš kódovanie cp1250 (pre Windows-1250), resp latin2 (pre ISO-8859-2), mohlo by to fungovať.

Základom je samozrejme vedieť, kde máš aké kódovanie. Ak máš napr. pre tabuľky nastavené kódovanie, ktoré nezvláda diakritiku, tak nech nastavíš pre komunikáciu s databázou ľubovoľné kódovanie, nemôžeš očakávať, že z nej nejakú diakritiku dostaneš. Takže v prvom rade by bolo dobré overiť, aké máš nastavené kódovanie v tabuľkách (napr. pomocou show create table meno_tabulky alebo show table status from meno_db where name='meno_tabulky').

V súčasnosti je pre web najlepšou voľbou kódovanie UTF-8.

Máš tam UTF-8 pre komunikáciu s databázou a nie Windows-1250. Použil si tú funkciu mysql_set_charset, o ktorej som písal? Alebo skoro ekvivalentné riešenie, čo píše nižšie ERASER.

Ešte to môže byť blbo zapísané priamo v databáze a nech spravíš čokoľvek, diakritiku tam nevykúzliš. Môžeš to overiť jednoduchým selectom priamo do tabuľky v nejakom klientovi, ktorý zvláda UTF-8.

Edit: Inak to show variables by si si mal vypísať priamo v tom skripte. Iný MySQL klient si môže nastaviť iné hodnoty, takže sa nedozvieš, čo sa použilo. Prípadne si vypíš show global variables.

Zkusil bych v přenosu z db použít kodování:

mysql_query("SET CHARACTER SET cp1250")or die("<br>Nelze nastavit kódování 1<br>");//kodovani pro komunikaci
mysql_query("SET NAMES cp1250")or die("<br>Nelze nastavit kódování 2<br>");//kodovani pro komunikaci

Ak si si ten preklep nevšimol predtým, tak zrejme nemáš nastavené zobrazovanie chýb:

error_reporting(E_ALL);
ini_set('display_errors','On');

Vyskúšaj to s týmto, ak tam máš nejaké chyby, tak ti ich to vypíše. Inak všetko podstatné už bolo v tomto vlákne napísané.

Zpět do poradny Odpovědět na původní otázku Nahoru