Этот вопрос выглядит неловко простым, но я не смог найти ответа.
Что такое эквивалент 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('エ', 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}";