我正在尝试从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
时,如何让实际数据显示在浏览器中?
答案 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');
答案 1 :(得分:2)
您应该使用JSON_UNESCAPED_UNICODE从字面上对多字节Unicode字符进行编码(默认为以\ uXXXX转义)。从PHP 5.4.0开始提供。 在这种情况下:
echo json_encode($output, JSON_UNESCAPED_UNICODE);