【发布时间】:2014-06-12 21:23:19
【问题描述】:
我正在从数据库中选择一些数据并将它们编码为 json,但是我遇到了像
这样的捷克符号的问题á,í,ř,č,ž...
我的文件是 utf-8 编码,我的数据库也是 utf-8 编码,我也将 header 设置为 utf-8 编码。请问我还能做什么?
我的代码:
header('Content-Type: text/html; charset=utf-8');
while($tmprow = mysqli_fetch_array($result)) {
$row['user'] = mb_convert_encoding($tmprow['user'], "UTF-8", "auto");
$row['package'] = mb_convert_encoding($tmprow['package'], "UTF-8", "auto");
$row['url'] = mb_convert_encoding($tmprow['url'], "UTF-8", "auto");
$row['rating'] = mb_convert_encoding($tmprow['rating'], "UTF-8", "auto");
array_push($response, $row);
}
$json = json_encode($response, JSON_UNESCAPED_UNICODE);
if(!$json) {
echo "error";
}
以及部分打印出来的json:"package":"zv???tkanalouce"
编辑:如果没有 mb_convert_encoding() 函数,打印的字符串为空,并且打印“错误”。
【问题讨论】:
-
如果要输出JSON,不要在header中设置
Content-Type: text/html,使用Content-Type: application/json。 -
只需通过该连接告诉您的数据库驱动程序您期望 UTF-8 编码的字符串值,丢弃您插入的 mb_convert_encoding(编码没有“自动”,您要么知道你做什么或者你在自己的脚下射击,没有电脑可以代替你),你应该没问题。
-
您希望
mb_convert_encoding($tmprow['rating'], "UTF-8", "auto")做什么?为什么有必要?"auto"编码参数代表什么?这是否意味着您不知道您的字符串具有哪种编码以及您需要使用哪种编码?请分享。 -
@Holt 现在看起来好多了,但是那些字符仍然看起来像'?',但是谢谢
-
@hakre "auto" 应该代表自动检测输入编码。