通过PHP从MySQL获取UTF-8字符串返回&”;


Get UTF-8 string from MySQL via PHP returned "????????"

在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']);