尝试使用 PHP 将带有 UNICODE 代码的 JSON 字符串转换为 UTF8

Cra*_*ide 2 php utf-8 character-encoding

我有一个包含许多 UNICODE 代码的 JSON 字符串,我正在寻找一种使用 PHP 将它们转换为 UTF8 的方法。\nJSON 字符串的值如下:

\n\n
{\n"capital":"Bras\\u00edlia",\n"symbol":"\\u20a1"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后是其他值,例如:

\n\n
{\n"native": "\xd8\xa7\xd9\x84\xd9\x8a\xd9\x8e\xd9\x85\xd9\x8e\xd9\x86",\n"symbol_native": "\xd8\xb1.\xd9\x8a.\xe2\x80\x8f"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

JSON 字符串包含在 PHP 变量中,如下所示:

\n\n
$countries =\'{  \n   "AR":{  \n      "name":"Argentina",\n      "native":"Argentina",\n      "phone":"54",\n      "continent":"SA",\n      "capital":"Buenos Aires",\n      "currency":{  \n         "symbol":"AR$",\n         "name":"Argentine Peso",\n         "symbol_native":"$",\n         "decimal_digits":2,\n         "rounding":0,\n         "code":"ARS",\n         "name_plural":"Argentine pesos",\n         "vat":"21",\n         "vat_name":"IVA"\n      },\n      "tin":"CUIT",\n      "languages":"es,gn",\n      "iso":"ARG"\n   }\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

已经尝试了网络上的大多数解决方案,但没有一个有效,尝试失败:

\n\n
utf8_encode()\nmb_convert_encoding()\niconv()\nheader(\'charset=utf-8\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

我发现成功将 UNICODE 代码转换为 UTF8 的唯一方法是使用str_replace()创建一个 UNICODE 代码数组和另一个具有等效 UTF8 值的数组,但我的数组不会涵盖所有可能的组合,所以我想知道是否有更简单的方法方法来做到这一点。

\n\n

这适用于数组中的字符:

\n\n
function unicodeToutf8($str){\n    $repl = [\'\\u00e1\',\'\\u00e9\',\'\\u00ed\',\'\\u00f3\',\'\\u00fa\',\'\\u00f1\',\'\\u00c1\',\'\\u00c9\',\'\\u00cd\',\'\\u00d3\',\'\\u00da\',\'\\u00d1\'];\n    $with = [\'\xc3\xa1\',\'\xc3\xa9\',\'\xc3\xad\',\'\xc3\xb3\',\'\xc3\xba\',\'\xc3\xb1\',\'\xc3\x81\',\'\xc3\x89\',\'\xc3\x8d\',\'\xc3\x93\',\'\xc3\x9a\',\'\xc3\x91\'];\n    return str_replace($repl,$with,$str);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

谢谢你!

\n

Eve*_*ert 5

如果您只是尝试在不使用 unicode 转义序列的情况下重新编码 JSON,则操作方法如下:

json_encode(json_decode($input), JSON_UNESCAPED_UNICODE);
Run Code Online (Sandbox Code Playgroud)