返回的 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` u003cu003e<>,所以你得到的是字符串中的转义 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 结果中的 Æøå - 数据看起来不像它应该的那样的主要内容,如果未能解决你的问题,请参考以下文章

将 Openquery 中的丹麦字符 (Æ Ø Å) 保留到链接服务器

ÆØÅ 在 MySQL 中无法正确显示

ÆØÅ 字母随机被 æÃ~Ã¥ 替换

NSPredicate 和丹麦字母 å 给出错误的结果

MYSQL C# 无法保存表格中的原始字符

正则表达式匹配(替换)跨度标签之间单词中所有出现的双引号