我已经改写了一个网站,现在它是XHTML有效等,并使用UTF8。一切都很好,但如果数据库中的任何地方都是欧洲字符,它只会显示为问号。€char显示为?在UTF8输出
什么是解决这个问题的正确方法? 由于输出是由Typo3完成的我不能改变很多。
我已经改写了一个网站,现在它是XHTML有效等,并使用UTF8。一切都很好,但如果数据库中的任何地方都是欧洲字符,它只会显示为问号。€char显示为?在UTF8输出
什么是解决这个问题的正确方法? 由于输出是由Typo3完成的我不能改变很多。
尝试之前执行这些查询是获取数据的查询:
SET NAMES utf8
SET CHARACTER SET utf8
如果您使用php/mysql扩展名(mysql_connect,mysql_query,...)和PHP 5> = 5.2.3,最好使用mysql_set_charset(),否则mysql_real_escape_string()不会“知道”编码的更改。请参阅http://php.net/mysql_set_charset – VolkerK 2009-08-13 09:16:31
这可能是由于错误的数据库连接编码
查找SET名的SQL语句
$db_link = mysql_connect($host,$user,$passwd);
mysql_query("SET CHARACTER SET 'utf8';", $db_link);
mysql_query("SET NAMES 'utf8';", $db_link);
如果你确定你有正确的字符数据(0x20AC
),它也可以是客户端的字体-侧。如果您使用的字体不处理该特定字符,则只会看到一些默认问号。
但是,为什么不使用转义码€
,它给你:€
干杯,
你可以尝试像
$value = iconv('ISO-8859-1', 'UTF-8//TRANSLIT', $value);
的 “ISO-8859-1” 的一部分可能会因您的MySQL表字符编码而有所不同。
不要发出这两个声明!
不要发出
SET NAMES utf8
SET CHARACTER SET utf8
了一个又一个。它可能会造成麻烦。在SET NAMES utf8之后,我已经对SET CHARACTER SET utf8有过不好的经验。
我建议只发出SET NAMES ...
MySQL的文档具有解释为什么:http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
简而言之:SET NAMES ...
设置连接的字符集,以相同的客户端ANS导致字符集。而SET CHARACTER NAME...
设置不同连接的字符集和整理。
请阅读文档,并决定哪一个更好的情况。或者更好地做一个测试。
对于包含€符号的数据库列,您使用什么charset(encoding,collation,...)?
问题可能是因为在不使用UTF-8字符编码时,€符号是某种难度的野兽,因此存储在此列中的数据不会混淆。问题在于,当使用ISO-8859-15时,€符号被编码为\xA4
,而在使用Windows-1252(Windows机器上常见的西欧 - 欧洲字符集)时被编码为\x80
。 如果列中的数据编码不正确,MySQL将无法正确将其转码为UTF-8 - 即使您使用SET NAMES utf8
。
这只会发生在€符号或与其他字符如ω(小欧米茄,utf8:0xCF 0x89)呢? – VolkerK 2009-08-13 09:24:28