我已经试着解决这个问题一个多星期了。
我有一个MySQL数据库utf8_general_ci。
当我使用php以JSON格式打印结果时,字符不是UTF8编码的。
数据库中存储的值是阿拉伯语
这是我正在使用的代码
数据库.php

<?php

$DBhost = "xx.xx.xx.x";
$DBusername = "username";
$DBpassword = "password";
$db_name = "bdname";

$connect = mysql_connect("$DBhost", "$DBusername", "$DBpassword")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

?>

打印结果的代码是
显示.php
<?php
include('db.php');

$tbl_name = "table_name";

mysql_set_charset('utf8');

$sth = mysql_query("SELECT * FROM $tbl_name");

$rows = array();

while($r = mysql_fetch_assoc($sth)) {
    $rows[] = array_map('utf8_encode', $r);
}

print json_encode($rows);
?>

输出示例:
[{“id”:“4”,“新闻id”:“1”,“字幕”:“\u00c3\u0083\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u0088\u00c3\u00c3\u00c3\u00c3\u00c3\u00c3\u00cU00C3\u00ad\u00c3\u0089\u00c3\u0087\u00c3\u00a1\u00c3\u008e\u00c3\u0087\u00c3\u00a3\u00c3\u0093\u00c3\u0089\u00c3\u00a1\u00c3\u009f\u00c3\u0091\u00c3\u0089\u00c3\u0087\u00c3\u00a1\u00c3\u009e\u00c3\u008f\u00c3\u00a3“
我从搜索中了解到/u00是拉丁文1,UTF8应该以/u0开始,而不是两个0。
尝试了不同的方法将latin1转换为UTF8,如iconv和decode_json,将mysql_set_charset更改为latin1,甚至删除它,使用UTF8添加了html头,latin1和windows-1526 charset也得到了相同的结果,有时标题输出会得到空结果。
我没有选择,真的不知道该怎么办
知道吗?

最佳答案

在.php文件中包含下一个头

<?php
header('Content-type: application/json; charset=UTF-8');
...

并在JSON编码中添加“JSON_unscaped_UNICODE”
echo json_encode($response, JSON_UNESCAPED_UNICODE);

请确保删除不必要的utf8_encode()。

关于php - 使用php将JSON结果编码为UTF8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26138151/

10-09 05:53