Как вы печатаете необработанные символы UTF-8 из их номеров?

Скажем, я хотел напечатать ÿ (латинский маленький y с диарезисом) из его номера Unicode / UTF-8 U+00FF или hex c3 bf . Как я могу это сделать в PHP?

Причина в том, что мне нужно иметь возможность создавать определенные символы UTF-8 для тестирования в моих регулярных выражениях и строковых функциях. Однако, поскольку у меня на клавиатуре меньше 200 клавиш, я не могу их вводить, и, поскольку я много раз застрял в мире ASCII, мне нужно создать их базы исключительно из их безопасного ASCII , UTF- 8 символов.

Примечание. Для правильного отображения в браузере я знаю, что первый шаг

 header('Content-Type: text/html; charset=utf-8'); 

хорошо, у вас есть все, что вам нужно.
Значения шестнадцатеричных значений также распознаются в двойных кавычках

 echo "\xc3\xbf"; 

Решение 1 с небольшой функцией пакета

 <?php function chr_utf8($n,$f='C*'){ return $n<(1<<7)?chr($n):($n<1<<11?pack($f,192|$n>>6,1<<7|191&$n): ($n<(1<<16)?pack($f,224|$n>>12,1<<7|63&$n>>6,1<<7|63&$n): ($n<(1<<20|1<<16)?pack($f,240|$n>>18,1<<7|63&$n>>12,1<<7|63&$n>>6,1<<7|63&$n):''))); } echo chr_utf8(9405).chr_utf8(9402).chr_utf8(9409).chr_utf8(9409).chr_utf8(9412); //Output ⒽⒺⓁⓁⓄ 

Проверьте это в https://eval.in/748062

Решение 2 с json_decode

 <?php $utf8_char='["'; for($number=0;$number<55296;$number++) $utf8_char.='\u'.substr('000'.strtoupper(dechex($number)),-4).'","'; $utf8_char=json_decode(substr($utf8_char,0,-2).']'); echo $utf8_char[9405].$utf8_char[9402].$utf8_char[9409].$utf8_char[9409].$utf8_char[9412]; //Output ⒽⒺⓁⓁⓄ 

PHP отстой в Unicode. utf8_encode () преобразует только из ISO-8859-1 в UTF-8. И поскольку ваш символ ÿ = «U + 00FF» является одним из первых 256 кодовых точек в Юникоде (U + 0000 до U + 00FF), и поскольку Unicode решил, что этот диапазон должен совпадать с кодировкой ISO-8859-1, вы можете (в этом случае!) написать буквенную строку ISO-8859-1 с использованием этого шестнадцатеричного числа и преобразовать в UTF-8.

 <?php $x = utf8_encode("\xff"); print $x; ?> 

Это работает. Но, помимо сосания плохо, это не относится к символам Unicode, не включенным в ISO-8859-1.