我在MySQL中存储Unicode文本لاہور
,我已经将表和列设置为utf8_general_ci。文本لاہور
在MySQL中正确显示。但是,如果我用PHP回应它,它会在浏览器窗口显示??????
。
这里要提一句:我用Unicode编写整个文档,所有单词都正确显示,但它们是直接编写的,即不是来自MySQL。
即使我尝试
$p="لاہور";
echo $p;
它在浏览器中显示لاہور
。只有从MySQL检索时才会出错。
答案 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
添加到连接字符串。