【发布时间】:2018-05-13 09:10:55
【问题描述】:
我有一个一次性 URL 编码字符串:
$encodedJson = "%5B%7B%0A%09%22base%22%3A%20%7B%0A%09%09%22url%22%3A%20%22abc.com%22%2C%0A%09%09%22referrer%22%3A%20%22xyz.com%22%0A%09%7D%0A%7D%2C%20%7B%0A%09%22client%22%3A%20%7B%0A%09%09%22Pixel%22%3A%20false%2C%0A%09%09%22screen%22%3A%20%221680x1050%22%0A%09%7D%0A%7D%5D"
如果我使用以下函数,我有一个解码的 JSON,它是一个数组:
$decodedJsonArray = json_decode(rawurldecode($encodedJson), true);
然后print_r($decodedJsonArray); 给了我想要的输出:
Array
(
[0] => Array
(
[base] => Array
(
[url] => abc.com
[referrer] => xyz.com
)
)
[1] => Array
(
[client] => Array
(
[Pixel] =>
[screen] => 1680x1050
)
)
)
现在,假设我有一个多次 URL 编码的字符串:
$encodedJson = "%25255B%25257B%25250A%252509%252522base%252522%25253A%252520%25257B%25250A%252509%252509%252522url%252522%25253A%252520%252522abc.com%252522%25252C%25250A%252509%252509%252522referrer%252522%25253A%252520%252522xyz.com%252522%25250A%252509%25257D%25250A%25257D%25252C%252520%25257B%25250A%252509%252522client%252522%25253A%252520%25257B%25250A%252509%252509%252522Pixel%252522%25253A%252520false%25252C%25250A%252509%252509%252522screen%252522%25253A%252520%2525221680x1050%252522%25250A%252509%25257D%25250A%25257D%25255D"
此字符串经过三倍 URL 编码。现在,我想实现与以前相同的 JSON 数组。我正在尝试编写类似于以下的函数:
function recursiveJsonDecode($encodedJson) {
if (isJson($encodedJson)) {
return $encodedJson;
} else {
$decodedJsonArray = json_decode(rawurldecode($encodedJson), true);
return $decodedJsonArray;
}
}
但它不起作用。任何帮助将不胜感激。
【问题讨论】:
-
在第二个示例中究竟是什么不起作用?向我们展示你得到的输出。
-
我不知道PHP有一个函数叫
isJson -
递归函数的一个非常重要的特性是它会调用自己。
-
@DontPanic 一个不称为聋哑递归函数的函数
-
这只是一个理论练习,我猜?因为在现实中,您不应该处理不止一次编码的数据......这宁愿成为拒绝数据恕我直言的理由,并告诉谁将其发送给你要按顺序得到他们的东西...
标签: php json recursion urlencode urldecode