php - 尝试使用 PHP 将带有 UNICODE 代码的 JSON 字符串转换为 UTF8
问题描述
我有一个包含许多 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);
推荐阅读
- javascript - 未捕获的引用错误:未定义变量
- jquery - 我正在使用 laravel 5.4 并使用 ajax 提交
- javascript - 动态创建的 html 来获取图像 - 我想在提交之前显示检索到的图像
- datetime - 如何将 URL 中的 DateTime 值从 Postman 传递到 ASP.Net Core MVC 控制器
- python - 如何在 Python 中导入 OpenSSL 以获取证书的序列号
- java - Akka 演员正在停止
- ios - 代码签名错误 命令/usr/bin/codedesign 失败,退出代码为 1
- python - 熊猫索引日期时间格式未提供所需的输出 Python3
- javascript - jquery 不适用于 diango
- css - 如何仅为角度6中的特定组件设置背景图像