有几件事可能会有所帮助。首先,即使您在标头中将字符集设置为 UTF-8,这可能还不够。我之前已经看到浏览器忽略了这一点。尝试通过在 html 的头部添加它来强制它:
<meta charset='utf-8'>
接下来,如此处所述,尝试这样做:
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
编辑
所以我刚刚做了一些阅读,玩了一下。首先让我告诉你,尽管我在评论中提到了,在utf8_encode()
这里utf8_decode()
不会帮助你。它有助于实际理解 UTF-8 编码。我发现UTF-8上的 Wikipedia 页面非常有帮助。假设您从数据库返回的值实际上已经是 UTF-8 编码的,并且您只需在获取它后立即将其转储出来,那么它应该没问题。
如果你对数据库结果做任何事情(特别是以任何方式操作字符串)并且你不使用 PHP mbstring库中的 unicode 感知函数,那么它可能会搞砸,因为标准 PHP 字符串函数不知道 unicode .
一旦你了解了 UTF-8 编码的工作原理,你就可以做一些很酷的事情:
$test = "™";
for($i = 0; $i < strlen($test); $i++) {
echo sprintf("%b ", ord($test[$i]));
}
它会输出如下内容:
11100010 10000100 10100010
这是一个正确编码的 UTF-8 '™' 字符。如果从数据库中检索到的数据中没有这样的字符,那么就会出现问题。
要检查,请尝试使用以下命令搜索您知道结果中的特殊字符mb_strpos()
:
var_dump(mb_strpos($db_result, '™'));
如果返回的不是其他任何东西,false
那么数据库中的数据就可以了,否则我们至少可以确定这是 PHP 和数据库之间的问题。