2010-05-01 1 views
4

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

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

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

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

Для справки, связанный с принятым ответом вопрос, на самом деле также отвечает (лучше) этот. http://stackoverflow.com/questions/2748956/how-would-you-create-a-string-of-all-utf-8-characters-php – leonbloy

+0

Вы имеете в виду кодировку unicode U + 00FF, которая является представленный байтовой последовательностью UTF-8 'c3 bf'? Извините, но я был немного смущен. – jgivoni

ответ

7

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

echo "\xc3\xbf"; 
+1

Решена половина проблемы. Я не знал о трюке «\ x ...». Но как насчет номера 'U + 00FF' - как вы можете представить это в PHP - * или можете ли вы? * – Xeoncross

+0

Интересно, можете ли вы создать шестнадцатеричное значение из десятичного значения, например' print \ \ '. 191; '... – Xeoncross

+1

@Xeon базовое преобразование - очень простая задача, может быть выполнена любым начинающим программистом вручную. есть также некоторые функции в PHP, на которые я верю, а также на любой другой язык. , чтобы перекодировать U + 00FF, также возможно, и у вас есть функция. Или этот http://stackoverflow.com/questions/1140660/how-to-get-uxxxx-to-display-correctly-using-php5 В любом случае, чтобы спросить только половину проблемы, это не слишком хорошая практика. –

-1

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.

+0

Спасибо! Любой способ разрешить мне печатать любой символ * даже те, что находятся за пределами U + 00FF *? – Xeoncross

+0

mbstring и iconv должны быть ответом ... – leonbloy

+0

Это ответ на отображение и преобразование кодировок - но я не знаю, как это могло быть ответом на то, что вы просто печатаете случайный символ UTF-8, если все, что вы знаете, номер символа. – Xeoncross

1

Решение 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 ⒽⒺⓁⓁⓄ 
Смежные вопросы