97
Spróbuj tego:
$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);
W przypadku, gdy jest to styl C / C ++ / Java / Json oparty na 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
po której następują cztery cyfry szesnastkowe.źródło
json_decode('"' . $text . '"')
json_decode('{"t":"\uD83D\uDE0A"}')
jest is$text
może zawierać podwójne cudzysłowy. Tak zmieniona wersja będzie:json_decode('"'.str_replace('"', '\\"', $text).'"')
. Dzięki za pomoc :-)PHP 7+
Począwszy od PHP 7, możesz w tym celu użyć składni ucieczki punktu kodowego Unicode .
echo "\u{00ed}";
wyjściaí
.źródło
źródło
😍
Jest to młot kowalski zastępujący surowy kod UNICODE kodem HTML. Nie widziałem innego miejsca na umieszczenie tego rozwiązania, ale zakładam, że inni mieli ten problem.
Zastosuj tę funkcję str_replace do RAW JSON , zanim zrobisz cokolwiek innego.
To nie potrwa tak długo, jak myślisz, a to zastąpi DOWOLNY Unicode na HTML.
Oczywiście można to zmniejszyć, jeśli znasz typy Unicode, które są zwracane w formacie JSON.
Na przykład mój kod otrzymywał wiele strzałek i unikodu dingbat. Są to między 8448 a 11263. Tak więc mój kod produkcyjny wygląda następująco:
Możesz wyszukać bloki Unicode według typu tutaj: http://unicode-table.com/en/ Jeśli wiesz, że tłumaczysz arabski, telegu lub cokolwiek innego, możesz po prostu zastąpić te kody, a nie wszystkie 65 000.
Możesz zastosować ten sam młot do prostego kodowania:
źródło
Jest też rozwiązanie:
http://www.welefen.com/php-unicode-to-utf8.html
źródło
popraw wartości json, dodaj \ przed u {xxx} do wszystkich + ""
źródło