为什么php / mysql会转换这个字符?

时间:2012-10-07 17:11:35

标签: php mysql utf-8 character-encoding

我有一个包含utf8_unicode_ci字符串的数据库。一些例子是“Zìzhìqū”和“Shěng”。

当我运行此代码时:

    $result = mysql_query ("SELECT foo FROM bar");

$rows = Array ();

while ($row = mysql_fetch_row ($result))
    array_push ($rows, $row [0]);

mysql_free_result ($result);

$rows数组包含“Zìzhìqū”,其中“Shěng”已成为“Sh?ng”。当我将字符串写入文件时,我可以看到流氓问号是普通的ASCII 0x3f。

WTF?

我正在使用PHP 5.3.10-1ubuntu3.4和mysql Ver 14.14 Distrib 5.5.24。知道是什么导致了这个吗?

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您是否将PHP和MySQL之间的连接的字符编码设置为UTF-8?如果不这样做,将导致?替换为UTF-8字符。

SET NAMES 'utf8'

答案 2 :(得分:0)

请将您的数据库保存在DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci

然后

header("Content-type: text/html; charset=utf-8");
//mysql connection
mysql_query("SET NAMES utf8");