-2

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

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

即使我尝试

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

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

4

3 回答 3

1

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

header('Content-Type: text/html; charset=utf-8');
于 2012-11-26T19:06:32.177 回答
1

很可能您的 MySQL连接(而不是存储)没有设置为 UTF-8,导致从 MySQL 检索到的 UTF-8 数据被转换为 Latin1(或类似),它不能代表这些字符,它们被替换为?.

如果您正在使用mysql_

mysql_set_charset( 'utf8' );

如果您正在使用mysqli_

$mysqli->set_charset( 'utf8' );

您进行任何查询之前

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

于 2012-11-27T00:06:39.767 回答
1

造成这种情况的一个常见原因是您的 PHP 脚本正在以另一种格式(例如 ASCII)保存,您必须确保您的 PHP 脚本也保存为 UTF-8 或您在数据库中使用的任何编码。

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

于 2012-11-26T18:55:57.547 回答