Вопрос:
У меня есть эта последовательность Unicode: u304au306fu3088u3046u3054u3056u3044u307eu3059. Как преобразовать его в текст?
$unicode = ‘u304au306fu3088u3046u3054u3056u3044u307eu3059’;
Я пробовал:
echo $utf8-decode(unicode);
и я попробовал:
echo mb_convert_encoding($unicode , ‘US-ASCII’, ‘UTF-8’);
и я попробовал:
echo htmlentities($unicode , ENT_COMPAT, «UTF-8»);
но ни одна из этих функций не преобразует последовательность в соответствующий японский текст.
Ответ №1
Проблема здесь в том, что строка не является unicode. Это escape-последовательность, используемая для записи unicode с помощью символов ASCII (так что сохранение 7 бит).
Существует просто трюк для использования декодера phps json для этого:
<?php $sequence = ‘u304au306fu3088u3046u3054u3056u3044u307eu3059’; print_r(json_decode(‘[«‘.$sequence.'»]’));
Вывод:
Array ( [0] => おはようございます )
Это означает, что вы можете определить простую удобную функцию:
<?php $sequence = ‘u304au306fu3088u3046u3054u3056u3044u307eu3059’; function decode($payload) { return array_pop(json_decode(‘[«‘.$payload.'»]’)); } echo decode($sequence);
Вы хотите добавить обработку ошибок и экранирование определенных символов управления json внутри полезной нагрузки. Этот простой пример просто предназначен для указания вас в правильном направлении…
Удачи!
Ответ №2
PHP 7 +
Начиная с PHP 7, вы можете использовать Unicode codepoint escape-синтаксис для этого.
echo «u{304a}u{306f}u{3088}u{3046}u{3054}u{3056}u{3044}u{307e}u{3059}»; выводит おはようございます.
Ответ №3$unicode = ‘u304au306fu3088u3046u3054u3056u3044u307eu3059’; $json = sprintf(‘»%s»‘,$unicode); # build json string $utf8_str = json_decode ( $json, true ); # json decode echo $utf8_str; # おはようございます
См. Строка Json
Ответ №4
Класс Transliterator из intl extension может обрабатывать преобразование с помощью предопределенного идентификатора Hex-Any:
$in = ‘u304au306fu3088u3046u3054u3056u3044u307eu3059’; $out = transliterator_create(‘Hex-Any’)->transliterate($in); var_dump($out); # string(27) «おはようございます»