使用 PHP 将 URL 编码的字符串编码为 JSON

Eli*_*nko 1 php json url-encoding

我有一个带有 URL 编码符号的查询字符串:

\n\n
$wm_string = "LMI_MODE=1&LMI_PAYMENT_DESC=%CF%EE%E6%E5%F0%F2%E2%EE%E2%E0%ED%E8%E5+Plan+Z";\n
Run Code Online (Sandbox Code Playgroud)\n\n

我需要用 PHP 将其转换为 JSON,但是json_encode返回一个空字符串。

\n\n

这是我的 PHP 代码:

\n\n
parse_str($wm_string, $_REQUEST);\nvar_dump($_REQUEST);\necho "JSON:".json_encode($_REQUEST);\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果如下:

\n\n
array(1) { ["LMI_MODE"]=> string(46) "1?LMI_PAYMENT_DESC=\xd0\x9f\xd0\xbe\xd0\xb6\xd0\xb5\xd1\x80\xd1\x82\xd0\xb2\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 Plan Z Online" } JSON:\n
Run Code Online (Sandbox Code Playgroud)\n\n

我应该怎么办?

\n\n

更新:

\n\n

预期结果是:

\n\n
{ \n    "LMI_MODE":1,\n    "LMI_PAYMENT_DESC":"\xd0\x9f\xd0\xbe\xd0\xb6\xd0\xb5\xd1\x80\xd1\x82\xd0\xb2\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 Plan Z Online" \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

UPDATE2:\n编码是 windows-1251,而json_encode似乎需要 UTF-8。有没有办法告诉json_encode解析时应该使用哪种编码?

\n

Eli*_*nko 5

自从json_encode仅适用于 UTF-8,并且文本采用 windows-1251,因此应将其从该编码转换为 UTF-8。

\n\n
$wm_string = "LMI_MODE=1&LMI_PAYMENT_DESC=%CF%EE%E6%E5%F0%F2%E2%EE%E2%E0%ED%E8%E5+Plan+Z+Online";\n$wm_string = iconv("windows-1251", "UTF-8", $wm_string);\nparse_str(urldecode($wm_string), $result);\necho "JSON:".json_encode($result, JSON_UNESCAPED_UNICODE);\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
JSON:{"LMI_MODE":"1","LMI_PAYMENT_DESC":"\xd0\x9f\xd0\xbe\xd0\xb6\xd0\xb5\xd1\x80\xd1\x82\xd0\xb2\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 Plan Z Online"}\n
Run Code Online (Sandbox Code Playgroud)\n