使用PHP输出UTF-8特殊字符

时间:2012-09-12 22:52:01

标签: php mysql character-encoding

我正在尝试从MySQL数据库中JSON_encode数据。数据库中的字符应该是应该的。

例如,某些数据包含:è

当我打印到浏览器时,这是我获得的所有具有特殊字符的项目:

{"category":null}

以下是我用来测试的代码的基本淡化版本:

$sql = mysql_query("SELECT category FROM master_cat ORDER BY category ASC");
    while ($row = mysql_fetch_assoc($sql))
        $output[] = $row;

print(json_encode($output));

当我在网页上阅读JSON而不是null时,如何让实际数据显示在浏览器中?

2 个答案:

答案 0 :(得分:4)

您可以在文本字段中使用utf8_encode,但是您可以检查数据确实存在吗?也许用HTML输出数据而不是JSON编码呢?因为在我的系统上,UTF8被识别,出错,或者某些字符被截断。

缺少数据库数据的气味。

如果有数据,那么:

mysql_query('SET NAMES utf8;');
$sql = mysql_query("SELECT category FROM master_cat ORDER BY category ASC");
while ($row = mysql_fetch_assoc($sql))
    $output[] = array_map('utf8_encode', $row);

print(json_encode($output));

您可能还想明确指定MIME类型和字符集:

Header('Content-Type: application/json; charset=UTF-8');

请参阅What is the correct JSON content type?

答案 1 :(得分:2)

您应该使用JSON_UNESCAPED_UNICODE从字面上对多字节Unicode字符进行编码(默认为以\ uXXXX转义)。从PHP 5.4.0开始提供。 在这种情况下:

echo json_encode($output, JSON_UNESCAPED_UNICODE);