繁体   English   中英

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

[英]Trying to convert JSON string with UNICODE codes to UTF8 using PHP

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

{
"capital":"Bras\u00edlia",
"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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM