Intereting Posts
Opencart 2.1.0.2 Ошибка при установке ocmod.zip Есть ли способ сохранить целостность объектов при анализе html с помощью DomDocument? как получить значения из HTML, выберите php \ sql Code Igniter – лучшее место для объявления глобальной переменной Преобразование строки запроса в ассоциативный массив Как отправить переменную из php в приложение для Android? Требуется PHP Mailer Form с скриптом File Attachment для отправки информации о форме с или без вложения Swiftmailer: невозможно установить соединение с узлом smtp.gmail.com Часовой пояс и больше проблем с Cakephp 1.3 и PHP 5.3.2 Почему PHP имеет абстрактные классы, если вы можете использовать интерфейс и черты? Маршрутизация CakePHP в контроллерах страниц найти все URL (ссылки) в тексте с помощью php php shell_exec, выполняющий java-программу Что ограничивает мои ресурсы PHP? Перенаправление вместо 404 Страница ошибки – Код состояния не работает (Nginx)

Символ Unicode в строке PHP

Этот вопрос выглядит неловко простым, но я не смог найти ответа.

Что такое эквивалент PHP для следующей строки кода C #?

string str = "\u1000"; 

Этот образец создает строку с одним символом Unicode, чье «числовое значение Unicode» равно 1000 в шестнадцатеричном формате (4096 в десятичной системе).

То есть, в PHP, как я могу создать строку с единственным символом Unicode, чье «числовое значение Unicode» известно?

Поскольку JSON напрямую поддерживает синтаксис \uxxxx первое, что приходит мне в голову:

 $unicodeChar = '\u1000'; echo json_decode('"'.$unicodeChar.'"'); 

Другой вариант – использовать mb_convert_encoding()

 echo mb_convert_encoding('က', 'UTF-8', 'HTML-ENTITIES'); 

или использовать прямое сопоставление между UTF-16BE (big endian) и кодовым кодом Unicode:

 echo mb_convert_encoding("\x10\x00", 'UTF-8', 'UTF-16BE'); 

PHP 7.0.0 ввел синтаксис «Unicode codepoint escape» .

Теперь можно легко писать символы Unicode, используя строку с двойными кавычками или heredoc , не вызывая никакой функции.

 $unicodeChar = "\u{1000}"; 

PHP не знает эти escape-последовательности Unicode. Но поскольку неизвестные escape-последовательности остаются незатронутыми, вы можете написать свою собственную функцию, которая преобразует такие escape-последовательности Unicode:

 function unicodeString($str, $encoding=null) { if (is_null($encoding)) $encoding = ini_get('mbstring.internal_encoding'); return preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/u', create_function('$match', 'return mb_convert_encoding(pack("H*", $match[1]), '.var_export($encoding, true).', "UTF-16BE");'), $str); } 

Или с анонимным выражением функции вместо create_function :

 function unicodeString($str, $encoding=null) { if (is_null($encoding)) $encoding = ini_get('mbstring.internal_encoding'); return preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/u', function($match) use ($encoding) { return mb_convert_encoding(pack('H*', $match[1]), $encoding, 'UTF-16BE'); }, $str); } 

Его использование:

 $str = unicodeString("\u1000"); 

Интересно, почему никто еще не упомянул об этом, но вы можете сделать почти эквивалентную версию, используя escape-последовательности в двойных кавычках :

\x[0-9A-Fa-f]{1,2}

Последовательность символов, соответствующих регулярному выражению, является символом в шестнадцатеричной нотации.

Пример ASCII:

 <?php echo("\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x21"); ?> 

Привет мир!

Итак, для вашего случая все, что вам нужно сделать, это $str = "\x30\xA2"; , Но это байты , а не символы. Байт-представление кодового слова Unicode совпадает с UTF-16 big endian, поэтому мы можем распечатать его непосредственно как таковой:

 <?php header('content-type:text/html;charset=utf-16be'); echo("\x30\xA2"); ?> 

Если вы используете другую кодировку, вам необходимо изменить соответствующие байты (в основном, с помощью библиотеки, хотя это возможно и вручную).

Пример UTF-16:

 <?php header('content-type:text/html;charset=utf-16le'); echo("\xA2\x30"); ?> 

Пример UTF-8:

 <?php header('content-type:text/html;charset=utf-8'); echo("\xE3\x82\xA2"); ?> 

Существует также функция pack , но вы можете ожидать, что она будет медленной.

 html_entity_decode('&#x30a8;', 0, 'UTF-8'); 

Это тоже работает. Однако решение json_decode () выполняется намного быстрее (около 50 раз).

Попробуйте портативный UTF-8 :

 $str = utf8_chr( 0x1000 ); $str = utf8_chr( '\u1000' ); $str = utf8_chr( 4096 ); 

Все работают точно так же. Вы можете получить utf8_ord() символа с помощью utf8_ord() . Узнайте больше о Portable UTF-8 .

Символ Unicode Строка эхо.
попробуйте ниже.

 echo "\u{01F603}";