Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno špatné kódování HTML stránky?

Dobrý den,
Dostal jsem na starosti administraci jedněch webových stránek a narazil na zajímavý problém. Předem ale pár informací:

-Web je scriptován v php.
-Formát textu .php souborů je UTF-8
-Kódování HTML je nastaveno na UTF-8 (předtím bylo nastaveno na latin2)
-Kódování databáze MySql a všech tabulek a sloupců je nastaveno na UTF-8
-V php se z nějakého zvláštního důvodu používalo přetypovávání na UTF-8 a nazpátek při transakcích v db (přes funkci iconv(...))

Problém je v tom, že když vytvořím nový řádek v databázi a napíši tam speciální české znaky, pak při výpisu ve webu jsou sice ve formátu UTF-8, ale stejně se zobrazují místo nich samé ??. Na druhou stranu když ve formu na webu přepíšu tyto informace na správné české znaky, tak se zase v databázi uloží jako otazníky.

Nesetkal se někdo s tímto problémem?
Neporadil by mi někdo?

Děkuji za odpověd!!

Předmět Autor Datum
Za mysql connect pridaj takéto niečo: mysql_query("set names 'utf8'");
čitateľ 10.10.2016 05:16
čitateľ
Rozvinu podrobněji radu čitateľa: podívej se, jaké příkazy či knihovna se používají pro připojení, č…
hynajs 10.10.2016 08:32
hynajs
Oboum díky, funguje to, bylo tam nastaveno opět kódování do latin2. :)
hajnis 10.10.2016 10:48
hajnis
Len doplním, že rozšírenie mysql je zastarané a od 7.0.0 nie je jeho použitie vôbec podporované. Nam… poslední
los 10.10.2016 18:14
los

Rozvinu podrobněji radu čitateľa: podívej se, jaké příkazy či knihovna se používají pro připojení, čtení a zápis do databáze.
Pokud mysql_connect, mysql_query a spol., potom oprav kódování dle jeho rady.
Pokud PDO, pak charset zadávám jako parametr při new PDO .
Pokud mysqli nebo něco jiného, pak se musíš podívat do dokumentace.

Len doplním, že rozšírenie mysql je zastarané a od 7.0.0 nie je jeho použitie vôbec podporované. Namiesto neho by si mal použiť buď mysqli alebo PDO.

Pre nastavenie kódovania sa používa funkcia mysqli::set_charset (alebo v minulosti zastaraná mysql_set_charset). Pri použití PDO nastavíš charset ako ďalší parameter pripájacieho reťazca "charset=utf8" (od PHP 5.3.6, predtým len cez set names). Výhoda oproti set names je taká, že pri volaní mysqli::real_escape_string (resp. zastaranej mysql obdoby) sa interne použije správne kódovanie. To by ti ale v prípade, ak používaš výhradne parametre, nemalo vadiť.

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