返回的 JSON 结果中的 Æøå - 数据看起来不像它应该的那样
Posted
技术标签:
【中文标题】返回的 JSON 结果中的 Æøå - 数据看起来不像它应该的那样【英文标题】:Æøå in returned JSON result - the data doesn't look like it's supposed to 【发布时间】:2015-11-05 04:34:52 【问题描述】:我使用 JSON 从 url 请求中获取了一些数据,代码如下:
$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);
这段代码运行得非常好,只是输出的数据看起来很奇怪,例如:
"content-encoding":"gzip","vary":"Accept-Encoding","strict-transport-security":"max-age=15768000","body":"\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?\u003E\n\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
经过一些研究,我意识到问题的一部分很可能是我请求的数据中有 æ、ø 和 å 的事实。其他人是这样解决问题的:
$input = json_encode(utf8_decode($result), true);
但是这给了我这个错误:
Warning: utf8_decode() expects parameter 1 to be string, array given in
我知道数组不是字符串,但我该怎么处理呢?它似乎对其他人有用,我不知道为什么。
谢谢。
编辑:
我在打印数据的开头注意到了这一点。
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)
引起的文本中的sn-p。对于任何混淆,我很抱歉,我对 php 和 JSON 都很陌生。
这是不可能的。 response uri =...
不是有效的 json。 json_encode() 不可能产生这样的字符串。 "response uri =..."
,加上"
-quotes,可能是有效的json。
也许更多上下文会有所帮助:`Accept-Encoding","strict-transport-security":"max-age=15768000","body":"\u003C?xml version=\ "1.0\" encoding=\"UTF-8\" ?\u003E\n\u003Cresponse uri=\"\/ats\/private\/xml\/JobOpenings\/getRecords`
u003c
和 u003e
是 <
和 >
,所以你得到的是字符串中的转义 XML。
【参考方案1】:
您在$result
中收到的是一个 utf-8 字符串,它似乎代表某种 url。无论如何,json_encode
会将任何 unicode 字符转义为 \u008E
字符串。
如果您不想转义 utf-8 字符,这个问题与您相关:Why does the PHP json_encode function convert UTF-8 strings to hexadecimal entities?
就我所见,一切似乎都运行良好。虽然,您提供给我们的字符串似乎是 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); $input_unicode = json_encode($input, JSON_UNESCAPED_UNICODE); var_dump($input_unicode);
你为什么json_encode
两次?你只需要做一次。如果你这样做两次,一切都会很糟糕。只需做$input = json_encode($result, JSON_UNESCPAED_UNICODE);
仔细阅读文档:se2.php.net/json_encode
谢谢!让我更进一步,但现在身体看起来像这样,我不明白:"\n<\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/row><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/FL><\/row>
以上是关于返回的 JSON 结果中的 Æøå - 数据看起来不像它应该的那样的主要内容,如果未能解决你的问题,请参考以下文章