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



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

{
"capital":"Brasu00edlia",
"symbol":"u20a1"
}

然后是其他值,如:

{
"native": "اليَمَن",
"symbol_native": "ر.ي.‏"
}

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

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

已经尝试了网络和SO的大多数解决方案,但都不起作用,尝试失败:

utf8_encode()
mb_convert_encoding()
iconv()
header('charset=utf-8');

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

这个适用于数组中的字符:

function unicodeToutf8($str){
$repl = ['u00e1','u00e9','u00ed','u00f3','u00fa','u00f1','u00c1','u00c9','u00cd','u00d3','u00da','u00d1'];
$with = ['á','é','í','ó','ú','ñ','Á','É','Í','Ó','Ú','Ñ'];
return str_replace($repl,$with,$str);
}

谢谢!

如果您只是试图在没有unicode转义序列的情况下重新编码JSON,那么它就是这样完成的:

json_encode(json_decode($input), JSON_UNESCAPED_UNICODE);