Autor | Zpráva | ||
---|---|---|---|
kuba123 Profil * |
#1 · Zasláno: 20. 6. 2013, 09:34:53 · Upravil/a: kuba123
Chtěl bych rozjet jeden svůj script, kterej jsem psal před časem a zapomněl jsem jak se pracuje s češtinou na databázi.
Mám v tabulkách nastaveno: utf8_czech_ci a v php my admin mám nastaveno "Porovnávání pro toto připojení k MySQL:" utf8_unicode_ci když dám příkaz na vytisknutí podporovaných sad tak mezi nimi mám cp1250 Windows Central European - cp1250_general_ci Skript se kterým pracuji je v utf-8, kódování na stránce je: <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-language" content="cs"> Tak nevím co mám špatně, poradíte? A ještě mám jinou databázi k jiným stránkám a tam je nastaveno u tabulek utf8_general_ci a to mi zase nejde zobrazit správně v phpmyadminu, ale na stránkách RS se to zobrazuje správně... |
||
Joker Profil |
#2 · Zasláno: 20. 6. 2013, 09:52:19
kuba123:
Pravidlo je takové, že jsou tři věci: • Kódování, v jakém je uložený soubor (kódování nastavené v editoru při ukládání souboru se stránkou), • kódování, v jakém stránka říká že je (meta charset, meta content-type anebo HTTP hlavička content-type), • komunikační kódování s databází (SQL dotaz SET NAMES) Tyhle tři musejí být nastavené na to samé kódování. |
||
kuba123 Profil * |
#3 · Zasláno: 20. 6. 2013, 10:51:48
Joker:
Už jsem na to přišel. Mám ve třídě mysql tuhle metodu: public function setMysqlCharset($charset){ $charset = strtolower($charset); $charset = strtr ( $charset, array('-'=>'',' '=>'') ); $r = mysql_query ("SET NAMES '$charset'"); // tento příkaz by změnil to co nastavilo COLLATE při ALTER DATABASE ... $r = mysql_query("SET CHARACTER SET $charset"); // musí se nastavit až po výběru databáze if (!$r) $this->m->errors->init_errors[] = "Mysql warnning: charset not set. Check Mysql_class::setMysqlCharset(). ".mysql_error($r); $r = mysql_query("SET COLLATION_CONNECTION='utf8_czech_ci';"); if (!$r) $this->m->errors->init_errors[] = "Mysql warnning: charset not set. Check Mysql_class::setMysqlCharset(). ".mysql_error($r); } Ale nikde jsem ji nevolal. A pak jsem našel že tento řádek byl z nějakého důvodu zakomentovaný: $this->setMysqlCharset("utf8"); Takže nejdříve se musím připojit na mysql, pak vybrat db a pak provést ten požadavek SET NAMES. Dík |
||
Joker Profil |
#4 · Zasláno: 20. 6. 2013, 11:24:02
kuba123:
„Mám ve třídě mysql tuhle metodu“ Ta je víceméně zbytečná. Jediná podstatná část je: mysql_query ("SET NAMES '$charset'"); , ten zbytek není potřeba.
Jinak mysql rozšíření je od PHP 5.5 zastaralé (deprecated), takže by bylo dobré aktualizovat. |
||
kuba123 Profil * |
#5 · Zasláno: 20. 6. 2013, 12:01:30 · Upravil/a: kuba123
Co tím myslíš?
"Jinak mysql rozšíření je od PHP 5.5 zastaralé" |
||
Časová prodleva: 11 let
|
0