Autor Zpráva
spenciii
Profil
Dobrý den,
žádám o radu, vyzkoušel jsem již mnoho způsobů nastavení kódování, ale zatím bez úspěchu, a proto žádám Vás.

Kodování v phpMyAdmin mám nastaveno latin2_czech_cs
V php kodu rovněž:
mysql_query("SET CHARACTER SET latin2_czech_cs");
            mysql_query("SET NAMES latin2_czech_cs");
Výsledek je zobrazován pomocí htmlentities

A přesto se mi zobrazují pouze výsledky, které jsou bez diakritiky.

Děkuji.
Kubo2
Profil
spenciii:
A přesto se mi zobrazují pouze výsledky, které jsou bez diakritiky.
A máš ich v databáze uložené s diakritikou?
spenciii
Profil
Ano.
juriad
Profil
spenciii:
Takže se neukazují špatně, ale neukazují se vůbec?
spenciii
Profil
Ano, vůbec se nezobrazují.
Kubo2
Profil
spenciii:
Skúšal si použiť mysql_set_charset?

// ...
mysql_set_charset( "latin2_czech_cs" );

Zmenené: Je možné, že máš text v databáze uložený v inom kódovaní, ako máš nastavené (latin2_czech_cs).
spenciii
Profil
[#6]:
Ano, taktéž nefunguje.
Kajman
Profil
spenciii:
Nedávejte tam porovnání, ale jen kódování. Tedy latin2.
spenciii
Profil
[#8]:
To lze jak, prosím?
Fisir
Profil
Reaguji na spenciiiho:
Prosím, pro příště se vyhněte rozšíření mysql_*. Je zastaralé a v příštích verzích PHP bude odstraněno. Můžete přejít například na mysqli.
Kubo2
Profil
spenciii:
To lze jak, prosím?
Jednoducho namiesto latin2_czech_cs napíšeš latin2.
spenciii
Profil
[#11] Kubo2:
Jasně :), díky, ale bohužel opět nefunguje.
[#10] Fisir:
Děkuji za informaci.
Kajman
Profil
spenciii:

A opravdu máte stránky v kódování iso-8859-2? Můžete sem na ně poslat odkaz? Když se podívate adminerem do databáze, tak je diakritika v pořádku?
spenciii
Profil
[#13]:
Ano.
Web je zatím pouze na localhostu, takže nemohu.
Ano, diakritika je v admineru v pořádku.
Kajman
Profil
Kromě nastavení iso-8859-2 v hlavičce html si zkontrolujte i nastavení v http hlavičkách. Pokud ani tam chyba nebude, zkuste poslat větší kus problémovéh kódu, kde bude i vidět, kdy děláte přihlášeni (heslo nepotřebujeme), nastavení set names a dotaz, který se špatně zobrazí.
spenciii
Profil
I nastavení v http hlavičce je v pořádku.

Posílám kod pro připojení k databázi
if($conn = mysql_connect($server="xxxx", $username="xxxx", $password="xxxx")) {  
             mysql_query("SET CHARACTER SET latin2");
            mysql_query("SET NAMES latin2");
        mysql_select_db($database_name="knihovna");

Výstupní kod pro zobrazení na stránce:
.....

if ($result=mysql_query("SELECT * FROM knihy ORDER BY Názevknihy")) {
printf("<p>Počet záznamů: %d</p>\n", mysql_num_rows($result));
printf("<p>Počet sloupců: %d</p>\n",
mysql_num_fields($result));
while($row = mysql_fetch_object($result)) {
    if ($row->Názevknihy) 
                    printf("<br />%s -- %s\n",
                            htmlentities($row->Názevknihy), htmlentities($row->Autor));
                else
                    printf("<br />%s\n", htmlentities($row->Názevknihy));
                }
                mysql_free_result($result);
.....

Po tomto dotazu se zobrazí pouze záznamy, ve kterých není česká diakritika.
Kajman
Profil
htmlentities očekává řetězec v ISO-8859-1 nebo UTF-8, pokud mu neřeknete jinak. Navíc ISO-8859-2 není touto funkcí podporované.

A nemáte tam htmlentities omylem, nechcete tam spíše ošetřit html znaky díky htmlspecialchars (které ale také nemá podporu pro ISO-8859-2, ale nemělo by to spadnout)?
spenciii
Profil
htmlentities tam omylem nemám.S php a MySQL teď začínám, takže je možné, že jsem je použil ve špatném případě.
htmlspecialchars jsem zatím nepoužíval, poradil byste mi, prosím jak je implementovat do kodu . Mé pokusy skončily bezúspěšně.
Kajman
Profil
Zkuste si ten kód bez htmlentities, zda se vypíší všechny řádky. Pak zkuste dát htmlspecialchars na ty místa, kde je nyní htmlentities.
spenciii
Profil
Tak již je vše v pořádku, dle doporučení Fisira jsem kod překodoval na MySQLi.
Našel jsem procedurální styl z této stránky, který jsem v kodu použil: http://cz2.php.net/mysqli_set_charset
A výsledný dotaz se nyní zobrazuje v tabulce a využívá kodování UTF-8 - česká diakritika se již zobrazuje bez problémů.
Výstupní kod jsem zcela pozměnil (již neobsahuje htmlentities, ani htmlspecialchars)
Všem zúčastněným děkuji za ochotu pomoci.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: