我已经重新设计了一个网站,现在它是xhtml有效等并使用UTF8。一切都很好,但如果数据库中的任何地方都是欧元字符,它只会显示为问号。
解决这个问题的正确方法是什么? 由于输出由Typo3完成,我无法改变这一点。
答案 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和collation。
请阅读文档,并根据您的情况决定哪个更好。或者甚至更好地进行测试。
答案 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表格字符编码。