从MySQL中检索Unicode文本导致????在输出中

时间:2012-11-26 18:51:42

标签: php mysql unicode

我在MySQL中存储Unicode文本لاہور,我已经将表和列设置为utf8_general_ci。文本لاہور在MySQL中正确显示。但是,如果我用PHP回应它,它会在浏览器窗口显示??????

这里要提一句:我用Unicode编写整个文档,所有单词都正确显示,但它们是直接编写的,即不是来自MySQL。

即使我尝试

$p="لاہور";
echo $p;

它在浏览器中显示لاہور。只有从MySQL检索时才会出错。

3 个答案:

答案 0 :(得分:1)

这样做的一个常见原因是您的PHP脚本使用其他格式(例如ASCII)保存,您必须确保您的PHP脚本也保存为UTF-8或您在数据库中使用的任何编码。< / p>

另一个可能的原因是MySQL没有向你的脚本返回正确的Unicode字符,你可以使用mysql_query("SET NAMES utf8")或你想要使用的任何编码,在处理你的查询之前,麻烦这个问题的好办法可能是转换字符串到它们各自的unicode代码并比较它们以查看它们是否相同。

答案 1 :(得分:1)

使用元标记设置内容类型可能并不总是足够的,我通常通过header指令以及下面的指令设置它。

header('Content-Type: text/html; charset=utf-8');

答案 2 :(得分:1)

很可能你的MySQL 连接(而不是存储)尚未设置为UTF-8,导致从MySQL检索的UTF-8数据被转换为Latin1(或类似),不能代表这些字符,而是用?替换。

如果您使用mysql_

mysql_set_charset( 'utf8' );

如果您使用mysqli_

$mysqli->set_charset( 'utf8' );

之前进行任何查询

如果您使用PDO,请将charset=utf8添加到连接字符串。