Есть ли в PHP функция, которая может декодировать escape-последовательности Unicode, такие как " \u00ed
" to " í
" и все другие подобные случаи?
Я нашел здесь аналогичный вопрос, но, похоже, он не работает.
Попробуй это:
$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}, $str);
Если это стиль C / C ++ / Java / Json на основе UTF-16:
$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UTF-16BE');
}, $str);
\u
следуют четыре шестнадцатеричных цифры.источник
json_decode('"' . $text . '"')
json_decode('{"t":"\uD83D\uDE0A"}')
это 😊$text
могут включать двойные кавычки. Таким образом , пересмотренный вариант будет:json_decode('"'.str_replace('"', '\\"', $text).'"')
. Спасибо за вашу помощь :-)PHP 7+
Начиная с PHP 7, для этого можно использовать escape-синтаксис кодовой точки Unicode .
echo "\u{00ed}";
выходыí
.источник
источник
😍
Это кувалда для замены необработанного UNICODE на HTML. Я не видел другого места, где можно было бы разместить это решение, но предполагаю, что у других была эта проблема.
Примените эту функцию str_replace к RAW JSON , прежде чем делать что-либо еще.
Это займет не так много времени, как вы думаете, и это заменит ЛЮБОЙ юникод на HTML.
Конечно, это можно уменьшить, если вы знаете типы Unicode, которые возвращаются в JSON.
Например, в моем коде было много стрелок и дингбата в юникоде. Это от 8448 до 11263. Итак, мой производственный код выглядит так:
Вы можете найти блоки Unicode по типу здесь: http://unicode-table.com/en/ Если вы знаете, что переводите арабский язык, телегу или что-то еще, вы можете просто заменить эти коды, а не все 65 000.
Вы можете применить эту же кувалду к простому кодированию:
источник
Также есть решение:
http://www.welefen.com/php-unicode-to-utf8.html
источник
исправить значения json, добавить \ перед u {xxx} ко всем + ""
источник