Попытка преобразовать строку JSON с кодами UNICODE в UTF8, используя PHP - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть строка JSON со многими кодами UNICODE, я ищу способ конвертировать их в UTF8 с помощью PHP. Строка 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);
}

Спасибо!

1 Ответ

1 голос
/ 28 апреля 2020

Если вы просто пытаетесь перекодировать JSON без escape-последовательностей Юникода, вот как это делается:

json_encode(json_decode($input), JSON_UNESCAPED_UNICODE);
...