Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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#u decode不解码服务器';谁的反应?_Php_Json_Character Encoding_Control Characters - Fatal编程技术网

Php json#u decode不解码服务器';谁的反应?

Php json#u decode不解码服务器';谁的反应?,php,json,character-encoding,control-characters,Php,Json,Character Encoding,Control Characters,我正在尝试解码selenium服务器的响应。服务器返回: {"sessionId":null,"status":0,"value":{"os":{"arch":"amd64","name": "Windows Server 2008 R2","version":"6.1"},"java":{"version":"1.7.0_02"}, "build":{"revision":"15105","time":"2011-12-08 09:56:25","version":"2.15.0"}}, "c

我正在尝试解码selenium服务器的响应。服务器返回:

{"sessionId":null,"status":0,"value":{"os":{"arch":"amd64","name":
"Windows Server 2008 R2","version":"6.1"},"java":{"version":"1.7.0_02"},
"build":{"revision":"15105","time":"2011-12-08 09:56:25","version":"2.15.0"}},
"class":"org.openqa.selenium.remote.Response","hCode":1813953336}
我试着用以下方法来解码它:

$json = json_decode($s->result);
echo '<pre>'.print_r($json, 1).'</pre>';

但是,当我实际将结果粘贴到json_decode()中时,它做得很好吗?我哪里做错了

我猜
$s->result
是HTML响应主体,它不会作为UTF-8编码数据返回(因此
json\u encode
返回
NULL
)。这是服务器端的一个问题,因为JSON应该是UTF-8编码的。理想情况下,服务器将使用内容类型头进行响应,告诉您响应主体的编码

但是,您可以通过在响应上调用
utf8\u encode
来解决此问题:

$json = json_decode(iconv($sourceEncoding, 'UTF-8', $s->result));
echo '<pre>' . print_r($json, 1) . '</pre>';
'; 如果所有其他操作都失败,请查看以下输出:


EDIT:本例中的错误是
JSON\u error\u CTRL\u CHAR
;响应包含许多NUL字符,这些字符被
str\u replace(“\0”,”$s->result)

删除。它实际上是有效的:您当前的代码到底输出了什么?这是有效的,但是如果我尝试解码$s->result(它正好包含您的$json所包含的内容),如果
json\u encode
的结果是
NULL
@Saulius:--这表明您很可能有编码问题,正如cbuckley所指出的那样。@Saulius:json数据必须是UTF-8。响应也可能包含回车(它看起来像是来自Windows服务器)。请尝试
str\u replace(数组(“\r”,“\n”)、数组(“\r”,“\n”)、$s->result)
。是的,这一定是控制字符错误,str\u replace也没有帮助,有没有办法告诉curl返回UTF8?
$json = json_decode(utf8_encode($s->result));
echo '<pre>' . print_r($json, 1) . '</pre>';
$json = json_decode(iconv($sourceEncoding, 'UTF-8', $s->result));
echo '<pre>' . print_r($json, 1) . '</pre>';
if ($json === null) {
    var_dump(json_last_error());
}