在MySQL中,我有一个字符串,它在phpmyadmin中正确显示,排序规则设置为utf8_general_ci
。
在PHP文件中,我使用纯HTML设置了标题:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
php文件托管在Ubuntu、Apache 2.2上,文件保存在UTF-8 without BOM
(使用Notepad++)中
我已将连接设置为使用utf8:
@mysql_query("set names 'utf8'", $this->link);
$r = @mysql_query($query, $this->link);
它返回字符串(varchar 255),并使用PHP echo将其显示给浏览器。
然而,我仍然得到?????而不是实际的单词。
我似乎找不到我可能错过的东西,非常感谢你的帮助。
=====编辑=====
数据库、表和列可以有三种不同的排序规则,我将它们都设置为utf8_general_ci,并在连接后立即调用mysql_set_charset('utf8'),解决了我的问题。
我希望这将成为未来遇到同样问题的人的有用清单。我很可能在几个月后回来检查我是否错过了什么:)
感谢大家的大力投入。
请确保您的表位于utf8_general_ci
中。数据库和表可以有不同的字符集(当你自己改变它时可能发生)。
注意一些函数,比如htmlentities,对于PHP<5.4.0(对于PHP>5.4.0,设置为UTF-8)
http://php.net/manual/en/function.htmlentities.php
我认为'utf8'
周围的引号是错误的,但无论哪种方式,您都可以使用:
mysql_set_charset('utf8');
在查找错误时,使用@
运算符抑制错误不是一个好主意。
在查询之前检查类似的内容
mysql_query('SET character_set_results=utf8');
mysql_query('SET names=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_results=utf8');
mysql_query('SET collation_connection=utf8_general_ci');
您可以使用它将字符串编码为UTF-8,这样它就不会得到???,但将更改非urf-8字符,如/u003。这样你就可以稍后对其进行解码,将其呈现在文本上
while($var=mysql_fetch_assoc($r)){
$e['columnI']=utf8_encode($e['columnI']);