€char显示为?在UTF8输出中

时间:2009-08-13 07:25:35

标签: php mysql xhtml utf-8

我已经重新设计了一个网站,现在它是xhtml有效等并使用UTF8。一切都很好,但如果数据库中的任何地方都是欧元字符,它只会显示为问号。

解决这个问题的正确方法是什么? 由于输出由Typo3完成,我无法改变这一点。

6 个答案:

答案 0 :(得分:5)

尝试在获取数据的查询之前执行这些查询

SET NAMES utf8
SET CHARACTER SET utf8

答案 1 :(得分:4)

这可能是由于错误的数据库连接编码所致

查找SET NAMES sql语句

    $db_link = mysql_connect($host,$user,$passwd);
    mysql_query("SET CHARACTER SET 'utf8';", $db_link);
    mysql_query("SET NAMES 'utf8';", $db_link);

答案 2 :(得分:2)

请勿发出这两个声明!

不要发出

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 ...将连接的charset设置为与client和result charset相同。而SET CHARACTER NAME...设置不同连接的charset和collat​​ion。

请阅读文档,并根据您的情况决定哪个更好。或者甚至更好地进行测试。

答案 3 :(得分:2)

您对包含€符号的数据库列使用了什么字符集(编码,整理等)?

问题可能在于您存储在此列中的数据是混淆的,因为当不使用UTF-8字符编码时,€符号是一个有点困难的野兽。问题在于,当使用ISO-8859-15时,€符号编码为\xA4,而在使用Windows-1252(Windows机器上常见的西欧字符集)时,符号编码为\x80。 如果列中的数据编码不正确,MySQL将无法正确地将其转码为UTF-8 - 即使您使用SET NAMES utf8

答案 4 :(得分:0)

如果您确定自己拥有正确的角色数据(0x20AC),那么它也可能是客户端的字体。如果您使用的字体不能处理该特定字符,您只会看到一些默认问号。

但是,为什么不使用转义码€,它会为您提供:€

干杯,

答案 5 :(得分:0)

您可以尝试类似

的内容
$value = iconv('ISO-8859-1', 'UTF-8//TRANSLIT', $value);

“ISO-8859-1”部分可能会有所不同,具体取决于您的MySQL表格字符编码。