Этот вопрос выглядит смущающе простым, но я не смог найти ответ.
Что такое PHP эквивалент следующей строки кода C #?
string str = "\u1000";
В этом примере создается строка с одним символом Unicode, чье «числовое значение Unicode» равно 1000 в шестнадцатеричном формате (4096 в десятичном виде).
То есть в PHP как я могу создать строку с одним символом Unicode, чье «числовое значение Unicode» известно?
Ответы:
Поскольку JSON напрямую поддерживает
\uxxxx
синтаксис, первое, что приходит мне в голову:Другой вариант будет использовать
mb_convert_encoding()
или используйте прямое отображение между UTF-16BE (big endian) и кодовой точкой Unicode:
источник
\uxxxx
синтаксис Unicode, поэтому вы можете использовать егоjson_decode
для работы с искусственно созданным строковым представлением JSON. Я изменил формулировку, чтобы уточнить это.echo json_decode('\u201B');
Который ссылается на одну возвращенную кавычку. Однако это не работает, то есть не выводит (даже еслиhd
echo json_decode('"\u201B"');
. Двойные кавычки вокруг символа Unicode являются обязательными.В PHP 7.0.0 введен синтаксис «Unicode codepoint escape» .
Теперь можно легко писать символы Юникода, используя двойные кавычки или строку heredoc , без вызова какой-либо функции.
источник
wordwrap($longLongText, 20, "\u{200B}", true);
( пробел нулевой ширины )Интересно, почему никто еще не упомянул об этом, но вы можете сделать почти эквивалентную версию, используя escape-последовательности в двойных кавычках :
Пример ASCII:
Так что для вашего случая все, что вам нужно сделать, это
$str = "\x30\xA2";
. Но это байты , а не символы. Байтное представление кодовой точки Unicode совпадает с байтовым порядком байтов UTF-16, поэтому мы можем распечатать его напрямую как таковой:Если вы используете другую кодировку, вам необходимо соответствующим образом изменить байты (в основном это делается с помощью библиотеки, хотя это возможно и вручную).
Пример UTF-16 с прямым порядком байтов:
Пример UTF-8:
Также есть
pack
функция, но вы можете ожидать, что она будет медленной.источник
PHP не знает этих escape-последовательностей Unicode. Но поскольку неизвестные escape-последовательности остаются неизменными, вы можете написать свою собственную функцию, которая преобразует такие escape-последовательности Unicode:
Или с выражением анонимной функции вместо
create_function
:Его использование:
источник
Это тоже работает. Однако решение json_decode () намного быстрее (примерно в 50 раз).
источник
Попробуйте портативный UTF-8 :
Все работают точно так же. Вы можете получить кодовую точку символа с помощью
utf8_ord()
. Узнайте больше о Portable UTF-8 .источник
Как уже упоминалось, PHP 7
\u
напрямую поддерживает синтаксис Unicode.Как также упоминалось другими, единственный способ получить строковое значение из любого разумного описания символов Unicode в PHP, это преобразовать его из чего-то еще (например, JSON-разбор, HTML-разбор или некоторая другая форма). Но это происходит за счет производительности во время выполнения.
Однако есть еще один вариант. Вы можете закодировать символ непосредственно в PHP с
\x
двоичным экранированием.\x
Синтаксис побег также поддерживается в PHP 5 .Это особенно полезно, если вы предпочитаете не вводить символ непосредственно в строку через его естественную форму. Например, если это невидимый управляющий символ или другой трудно обнаруживаемый пробел.
Во-первых, доказательный пример:
Обратите внимание, что, как упомянул Pacerier в другом ответе, этот двоичный код является уникальным для конкретной кодировки символов. В приведенном выше примере
\xE2\x80\x8A
это двоичное кодирование для U + 200A в UTF-8.Следующий вопрос, как вы добираетесь
U+200A
до\xE2\x80\x8A
?Ниже приведен PHP-скрипт для генерации escape-последовательности для любого символа на основе либо строки JSON, HTML-сущности, либо любого другого метода, если у вас есть его как собственная строка.
источник
$ msg = '67714eac99c500200054006f006b0079006f002000530074006100740069006f006e003a0020';
echo unicode_to_textstring ($ str);
источник