??? in returned JSON result – the data doesn’t look like it’s supposed to
我使用 JSON 从 url 请求中获取了一些数据,代码如下:
1 2 3 4 5
|
$url = ‘https://recruit.zoho.com/ats/private/xml/JobOpenings/getRecords?authtoken=$at&scope=recruitapi’;
$request = new WP_Http ;
$result = $request->request($url, $data = array());
$input = json_encode($result, true);
var_dump($input);
|
这段代码运行得非常好,只是输出的数据看起来很奇怪,例如:
1 2
|
"content-encoding":"gzip","vary":"Accept-Encoding","strict-transport-security":"max-age=15768000"},"body":"//u003C?xml version="1.0" encoding="UTF–8" ?//u003E/
//u003Cresponse uri="///ats///private///xml///JobOpenings///getRecords"//u003E//u003Cresult//u003E//u003CJobOpenings//u003E//u003Crow no="1"//u003E//u003CFL val="JOBOPENINGID"//u003E//u003C![CDATA[213748000001263043]]//u003E//u003C///FL//u003E//u003CFL val="Published in website"//u003E//u003C![CDATA[false]]//u003E//u003C///FL//u003E//u003CFL val="Modified by"//u003E//u003C![CDATA
|
经过一些研究,我意识到问题的一部分很可能是因为我请求的数据中有 ?|、?? 和 ?¥。其他人是这样解决问题的:
但是这给了我这个错误:
我知道数组不是字符串,但我该怎么处理呢?它似乎对其他人有用,我不知道为什么。
谢谢。
编辑:
我在打印数据的开头注意到了这一点。
1
|
string (31486)"{"headers ":{"server ":"ZGS ","date":"Wed , 12 Aug 2015 13:59:32 GMT ","content –type ":"text// /xml ;charset =utf –8"
|
这是否意味着它已经是 UTF-8 而我完全关闭了?
- 困惑…这 response uri = … 究竟是从哪里来的?那是该网址返回的原始文本?或者通过 json_decode 运行它后得到什么?
-
这是由 var_dump($input) 引起的文本片段。对于任何混淆,我很抱歉,我对 PHP 和 JSON 都很陌生。
-
那是不可能的。 response uri =… 不是有效的 json。 json_encode() 不可能产生这样的字符串。 “response uri =…”,带有 “ 引号,可能是有效的 json。
-
///////<?xml 版本=//////”1.0//////” 编码=//////”UTF-8//////” ?///////>////
////////u003响应 uri=//////”/////////ats/////////private/////////xml/////////JobOpenings/////////getRecords////////`”,”链接”:”https://stackoverflow.com/questions/31967389/???-in-returned-json-result-the-data-doesnt-look-like-its-supposed-to#comment51842260_31967389″,”body”:”也许更多上下文会有所帮助:`Accept-Encoding”,”strict-transport-security”:”max-age=15768??000
-
我还更新了帖子中的片段,希望它能更清楚地说明问题。
-
u003c 和 u003e 是 < 和 >,所以你得到的是字符串中的转义 XML。
您在 $result 中收到的是一个 utf-8 字符串,它似乎代表某种 url。无论如何, json_encode 会将任何 unicode 字符转义为 //u008E 字符串。
如果您不想转义 utf-8 字符,这个问题与您相关:为什么 PHP json_encode 函数将 UTF-8 字符串转换为十六进制实体?
就我所见,一切似乎都运行良好。虽然,您提供给我们的字符串似乎是 troncated,但我想这是您的错误。
- 嘿,这似乎改变了一些事情,但仍然看不到? ? ? “Modified time///”////u003E////u003C![CDATA[20 Jul-2015]]////u003E////u003C///////FL////u003E////u003CFL val=///”Job nr.///”////u003E////u003C![CDATA[93]]////u003E////u003C///////FL////u003E??////u003CFL val=///”Stilling///”////u003E////u003C![CDATA[Senior Sales Manager]]////u003E////u003C///////FL////u003E////u003CFL val=///”Kunde///”////u003E////u003C![CDATA[Top Search Group]]////u003E////u003C///////FL////u003E////u003CFL val=///”Kundeansvarlig///”////u003E////u003C!
-
我做了以下事情:$input = json_encode($result, true); /t/t/t/t$input_unicode = json_encode($input, JSON_UNESCAPED_UNICODE); /t/t/t/tvar_dump($input_unicode);
-
为什么你 json_encode 两次?你只需要做一次。如果你这样做两次,一切都会很糟糕。只需执行 $input = json_encode($result, JSON_UNESCPAED_UNICODE); 仔细阅读文档:se2.php.net/json_encode
-
谢谢!让我更进一步,但现在身体看起来像这样,我不明白:“/
<///FL><///FL><///FL><///FL><///FL><///FL><///FL><///FL><///FL><///??FL><///FL><///FL><///FL??><///row><///FL><///FL>??<///FL><///FL><///FL><//??/FL><///FL><///FL><///F??L><///FL><///FL><///FL>??<///FL><///FL><///FL><//??/FL><///FL><///row>
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/php/268455.html