I have a one-time URL encoded string:
$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"
If I use the following functions, I have a decoded JSON, which is an array:
$decodedJsonArray = json_decode(rawurldecode($encodedJson), true);
Then print_r($decodedJsonArray);
gives me the desired output:
Array
(
[0] => Array
(
[base] => Array
(
[url] => abc.com
[referrer] => xyz.com
)
)
[1] => Array
(
[client] => Array
(
[Pixel] =>
[screen] => 1680x1050
)
)
)
Now, let's say I have a multiple-times URL encoded string:
$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"
This string is three-times URL encoded. Now, I want to achieve the same JSON array as before. I am trying to write a function similar to the following:
function recursiveJsonDecode($encodedJson) {
if (isJson($encodedJson)) {
return $encodedJson;
} else {
$decodedJsonArray = json_decode(rawurldecode($encodedJson), true);
return $decodedJsonArray;
}
}
But it's not working. Any help would be much appreciated.