Как вы печатаете сырые символы UTF-8 из их номеров? - PullRequest
5 голосов
/ 01 мая 2010

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 01 мая 2010

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

echo "\xc3\xbf";
1 голос
/ 28 февраля 2017

Решение 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 ⒽⒺⓁⓁⓄ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...