【发布时间】:2013-08-03 06:18:10
【问题描述】:
我正在托管一个由 PHP 输出的 JSON 格式的 Web 服务。
我在 DB 中有 希伯来语 数据集,并将其作为输出发布到 Web 服务。
当我最初发布数据时,它会输出如下结果:
JSON:
{
"tasklist": [
{
"customerID": "9936",
"name": "טר ×רמה ×™×–×•× ×•×‘×™× ×•×™ בע"מ",
"cargo":"×ברר",
"destination":"מכר",
"quantity":"1.000000",
"startdate":"03/01/201300: 00: 00"
}
]
}
但是这个"×ברר" 可以被Android/Iphone 解析器读取并将其转换为原始希伯来语。但我在"name": "טר ×רמה ×™×–×•× ×•×‘×™× ×•×™ בע"מ", 中遇到了错误。其中" 在字符串之间,因此 JSON 无效并显示错误!
为了解决这个问题,我使用UTF-8 将"×ברר" 转换为希伯来语"נברר"。但在这种情况下,问题仍然存在:
PHP:
header('Content-type: text/html; charset=UTF-8');
JSON:
{
"tasklist": [
{
"customerID": "9936",
"name": "טר ארמה יזום ובינוי בע"מ",
"cargo":"נברר",
"destination":"מכר",
"quantity":"1.000000",
"startdate":"03/01/201300: 00: 00"
}
]
}
但问题仍然存在:
另外,在某些情况下,由于使用 UTF-8,我会收到 �
"name":"מחצבות כפר גלעדי-חומרי מ�"
- 如何解决这个问题?
- 我还需要使用其他特定的编码吗?
注意:数据库中的数据不能更改,解决方法应该是同时输出到JSON。
数据在DB中的存储方式如下图:
名字
מחצבות כפר גלעדי-חומרי מ×
我的输出 JSON 的 PHP 脚本:
<?php
//My DB connection and Query comes here
$jsontext = '{"tasklist":[';
while($row = mysql_fetch_array($queryExe)){
$jsontext .= '{"customerID":"'.$row['AUTO_ID'].'",';
$jsontext .='"name":"'.$row['Customer_Name'].'",';
$jsontext .='"cargo":"'.$row['Type_of_Cargo'].'",';
$jsontext .='"destination":"'.$row['Destination'].'",';
$jsontext .='"quantity":"'.$row['Quantity'].'",';
$jsontext .='"startdate":"'.$row['startdate'].'"},';
}
$jsontext = substr_replace($jsontext, '', -1); // to get rid of extra comma
$jsontext .= "]}";
header('Content-type: text/html; charset=UTF-8');
//Output the final JSON
echo $jsontext;
?>
提前感谢您的帮助!
问题清楚了吗?了解我的问题。
【问题讨论】:
-
你是如何创建你的 json 的?我会执行以下操作:1. 从 db 读取值,2. 使用 utf8_encode 将每个值转换为 utf8,3. 将其放入 php 数组中,最后 4. 执行 json_encode 和 echo
-
@steven 我已经发布了我的 PHP 脚本,看看它。我最初没有编码,只是在输出到 Web 服务时我更改了标题!
-
设置标题是不够的。您需要 utf8_encoded 字符串。如果您的 db-field 不是 utf8,您可以使用 utf8_encode 获取它们。
-
@steven 我的数据库字段是 utf8_general_ci
-
这与
mysql有关,但没有关于它的标签。我想很多人最终会在这里寻找:header('Content-Type: application/json');或header("Content-type: application/json; charset=utf-8");
标签: php json web-services encoding hebrew