Portál AbcLinuxu, 6. května 2025 11:24
SET CHARACTER SET utf8
. Když se podívám jak to dělá phpMyAdmin, tak mi to vypisuje stejný příkaz, který spouštím já, ale stejně: phpMyAdmin funguje OK, můj skript ne. Nějaké nápady? Díky.
Ukládání vypadá nějak takhle:
$url = $_POST["url"]; $code = mb_ereg_replace("&", "&", $_POST["code"]); // $code vypadá např. takto: "Nějaký UTF-8 text ..." mysql_query("UPDATE `web` SET `code` = '$code' WHERE `web`.`url` = '$url' LIMIT 1;") or die(mysql_error());
Řešení dotazu:
set names utf8
mysql_query("SET NAMES 'utf8'"); mysql_query("SET COLLATION_CONNECTION='utf8_czech_ci'"); mysql_query("SET character_set_client=utf8"); mysql_query("SET character_set_connection=utf8"); mysql_query("SET character_set_results=utf8"); ini_set( 'default_charset', 'UTF-8' );a nic z toho nepomohlo
mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");
Komentář z 3. února 2009 10:53 na http://us.php.net/manual/en/function.mb-ereg-replace.php
show create database nazev_databaze; show create table nazev_tabulky; show variables like '%char%';Případně vydumpnout tabulku v binární podobě (asi to nějak jde i z phpmyadmina):
mysqldump databaze tabulka --default-character-set=binarya ověřit, v jaké podobě tam jsou data skutečně uložený.
CREATE TABLE `web` ( `url` varchar(128) collate utf8_czech_ci NOT NULL, `title` varchar(128) collate utf8_czech_ci NOT NULL, `code` varchar(10000) collate utf8_czech_ci NOT NULL, PRIMARY KEY (`url`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci COMMENT='html code'
character_set_client utf8 character_set_connection utf8 character_set_database latin1 character_set_filesystem binary character_set_results utf8 character_set_server latin1 character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/DB je podle všeho latin1... tabulka je ale utf8...
select hex(title) from web;Pokud to vrátí: C5BE6C75C5A56F75C48D6BC3BD, tak je to v DB uloženo správně a problém neni při ukládání ale při prezentaci těch dat.
takový menší seznam v?cí, které bych aktuáln?Myslím, že kdyby s tím pracoval jako s úplně jiným kódováním, zmršilo by se to víc a to je věc která mi vrtá hlavou...
Ak to funguje pod phpMyAdmin, tak mozno Tvoje PHP spojenie na MySQL nepouziva utf8. Skusim znova stastie, toto je clanok, ktory moze pomoct :
Unicode-friendly PHP and MySQL
mysql_set_charset - nastavuje charset pre mysql clienta
mysql_client_encoding - vracia charset pre mysql clienta (pre kontrolu)
UPDATE `web` SET `code` = _utf8'$code' WHERE `web`.`url` = '$url' LIMIT 1;Ještě jednou dík všem.
'SET CHARACTER SET utf8'
if(!mb_internal_encoding("UTF-8"))
die ("FATAL ERROR");
if(!mb_internal_encoding("UTF-8")) die ("FATAL ERROR, encoding"); $url = $_POST["url"]; $code = mb_ereg_replace("&", "&", $_POST["code"]); // $code vypadá např. takto: "Nějaký UTF-8 text ..." mysql_query("SET CHARACTER SET utf8") or die(mysql_error()); mysql_query("UPDATE `web` SET `code` = '$code' WHERE `web`.`url` = '$url' LIMIT 1;") or die(mysql_error());
mysql_pconnect()
místo mysql_connect
.if(!mb_internal_encoding("UTF-8")) die ("FATAL ERROR 02"); $spojeni = mysql_connect(..); mysql_query('SET CHARACTER SET utf8',$spojeni); mysql_query("UPDATE .... '" . mysql_escape_string($code) . "' ....",$spojeni);PS: aspoň
mysql_escape_string
by tam taky bodlo :)Když vložím do DB utf8 text přes admina, při výpisu na utf8 stránku je to oki. Když tam vložím text sám přes PHP, tak jsou tam místo některých znaků otazníky. PHP kód čeho? Jednoduše získám utf8 řetězec přes proměnnou $POST a když ho pomocí PHP echo() vypíšu na utf8 stránku je OK, ale jakmile ho pomocí SQL příkazu update vložím do DB jako utf8, je z toho bordel.... a při dalším výpisu na web je to OK nebo bordel? pokud je to OK tak je špatně nastavený phpMyAdmin.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.