Как преобразовать escape-последовательности Unicode в текст в PHP?

Вопрос:У меня есть эта последовательность 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: 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) «おはようございます»

Оцените статью
Добавить комментарий