Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP输出JSON Web服务字符集UTF-8错误_Php_Json_Web Services_Encoding_Hebrew - Fatal编程技术网

PHP输出JSON Web服务字符集UTF-8错误

PHP输出JSON Web服务字符集UTF-8错误,php,json,web-services,encoding,hebrew,Php,Json,Web Services,Encoding,Hebrew,我正在用PHP输出的JSON托管一个web服务 我在DB中有希伯来语数据集,我将其作为输出发布到Web服务 当我最初发布数据时,它会输出如下结果: JSON: { "tasklist": [ { "customerID": "9936", "name": "טר ×רמה ×™×–×•× ×•×‘×™× ×•×™ בע"מ", "cargo":"×ברר",

我正在用PHP输出的JSON托管一个web服务

我在DB中有希伯来语数据集,我将其作为输出发布到Web服务

当我最初发布数据时,它会输出如下结果:

JSON:

{
    "tasklist": [
        {
            "customerID": "9936",
            "name": "טר ×רמה ×™×–×•× ×•×‘×™× ×•×™ בע"מ",
            "cargo":"×ברר",
            "destination":"מכר", 
            "quantity":"1.000000",
            "startdate":"03/01/201300: 00: 00" 
        }
               ]
}
{
    "tasklist": [
        {
            "customerID": "9936",
            "name": "טר ארמה יזום ובינוי בע"מ",
            "cargo":"נברר",
            "destination":"מכר",
            "quantity":"1.000000",
            "startdate":"03/01/201300: 00: 00"
        }
                ]
}
但是这个
“××”××××”
可以被Android/Iphone解析器读取,并将其转换为原始希伯来语。但是我在
的“name”中遇到了错误:“×××××××××××××”™×–×•× ×•×‘×™× ×•×™ ×'×、“מ”,
。其中
位于字符串之间,因此JSON无效并显示错误

为了解决这个问题,我使用了
UTF-8
“×××”××××”
转换成希伯来语
“。但在这种情况下,问题仍然是一样的:

PHP:

{
    "tasklist": [
        {
            "customerID": "9936",
            "name": "טר ×רמה ×™×–×•× ×•×‘×™× ×•×™ בע"מ",
            "cargo":"×ברר",
            "destination":"מכר", 
            "quantity":"1.000000",
            "startdate":"03/01/201300: 00: 00" 
        }
               ]
}
{
    "tasklist": [
        {
            "customerID": "9936",
            "name": "טר ארמה יזום ובינוי בע"מ",
            "cargo":"נברר",
            "destination":"מכר",
            "quantity":"1.000000",
            "startdate":"03/01/201300: 00: 00"
        }
                ]
}
标题('Content-type:text/html;charset=UTF-8')

JSON:

{
    "tasklist": [
        {
            "customerID": "9936",
            "name": "טר ×רמה ×™×–×•× ×•×‘×™× ×•×™ בע"מ",
            "cargo":"×ברר",
            "destination":"מכר", 
            "quantity":"1.000000",
            "startdate":"03/01/201300: 00: 00" 
        }
               ]
}
{
    "tasklist": [
        {
            "customerID": "9936",
            "name": "טר ארמה יזום ובינוי בע"מ",
            "cargo":"נברר",
            "destination":"מכר",
            "quantity":"1.000000",
            "startdate":"03/01/201300: 00: 00"
        }
                ]
}
但问题仍然存在:

在某些情况下,我也会得到这个
因为使用了UTF-8

"name":"מחצבות כפר גלעדי-חומרי מ�"
  • 我如何克服这个问题
  • 有没有其他我需要使用的特定编码
注意:当输出到JSON时,数据不能是数据库中的更改,解决方案应该是

数据库中的数据存储方式如下所示:

名字

מ×-מ×'ו×תכ׷×'×'ל××דה™-חומרי מ×

我的输出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;

?>

提前感谢您的帮助


问题清楚吗?为了理解我的问题。

如果您的db字段是utf8,您应该首先执行以下操作:

mysql_query("SET NAMES 'utf8'");
在插入数据之前,也应始终执行“设置名称…”。 确保确实存储了utf8编码的字符串!

然后执行查询:

mysql_query($your_query);

$array = array("tasklist"=>array());    

while($row = mysql_fetch_array($queryExe)){
        $a = array();
        $a["customerID"] = $row['AUTO_ID'];
        $a["name"] = $row['Customer_Name'];
        $a["cargo"] = $row['Type_of_Cargo'];
        $a["destination"] = $row['Destination'];
        $a["quantity"] = $row['Quantity'];
        $a["startdate"] = $row['startdate'];
        $array["tasklist"][] = $a;
}

header("Content-type: application/json; charset=utf-8");

echo json_encode($array);
exit();
我的经验是,当服务器默认字符集为例如iso时,这些是不够的。在这种情况下,我需要在.htaccess中执行以下操作:

AddDefaultCharset utf-8

您应该更改代码以使用json_编码。您需要正确地传递utf8编码的数据

如果您使用的是MySQL,您可以在查询之前尝试运行以下命令以获取数据

SET NAMES 'utf8';
您还可以从中查看使用。

也就是说,引号“将生成无效的JSON,但这只是在使用JSON_encode()并希望PHP神奇地转义引号时的问题。您需要自己转义

也许你可以用
\“
替换
,我想这会解决问题


来源:

您是如何创建json的?我会做以下工作:1.从db读取值,2.使用utf8\u编码将每个值转换为utf8,3.将其放入php数组,最后4.执行json\u编码并echo@steven我已经发布了我的PHP脚本,看看它。我不是在最初编码,只是在输出到web服务时,我更改了头!s设置标题是不够的。您需要utf8编码的字符串。如果您的db字段不是utf8,您可以使用utf8编码来获得它们。@steven我的db字段是utf8\u general\u这与
mysql
有关,但没有标记。我很惊讶很多人会在这里寻找:
标题('Content-Type:application/json');
标题(“内容类型:application/json;charset=utf-8”);
你能检查一下我是否已经为你的代码添加了json输出。在Android/iphone中,在名称“x”附近无法解析它?{“任务列表”:[{“customerID”:“9936”,“名称”:“×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××,“目的地”:“××××”,“数量”:“1.000000”,“起始日期”:“2013年1月3日00:00:00”}]嗯,utf8\u encode的文档中说数据应该是ISO-8859-1字符串。我不认为你的字符串是这样的。你应该告诉我们你的db字段的编码是什么。我建议使用utf8,在这种情况下,你应该
设置名称“utf8”
像@BigToach sayed那样。在这种情况下,你不需要用php进行utf8\u编码。希望它有帮助s、 我的DB字段是utf8_general_ci我甚至尝试过BigToach方法,但仍然是相同的错误..BigToach mysql_set_charset('utf8');仍然是相同的问题:(有什么想法吗?你是否尝试过将代码更改为使用json_encode,而不是自己生成代码?是的..我按照另一个答案做了,并将你的代码混合在其中..但同样的错误..json验证错误只存在于名称中。