$formatthis = 219;
$printthis = 98;
// %c - the argument is treated as an integer, and presented as the character with
that ASCII value.
$string = 'There are %c treated as integer %c';
echo printf($string, $formatthis, $printthis);
Я пытаюсь понять printf ().
Я не совсем понимаю параметры.
Я вижу, что первый параметр — это строка, к которой будет применено форматирование.
Вторая — первая переменная для форматирования, а третья — вторая переменная для форматирования.
Чего я не понимаю, так это как заставить печатать символы Юникода, которые являются особыми.
НАПРИМЕР. За пределами a-z, A-Z,! @ # $% ^&*(){}» ТАК ДАЛЕЕ.
Кроме того, почему он помещается вместе с расположением последней цитаты в строке?
ВЫХОД:
Есть рассматривается как целое число 32
How could I encode this in to UTF-16 (Dec) // Snowman = 9,731 DEC UTF 16?
UTF-8 'LATIN CAPITAL LETTER A' (U+0041) = 41, but if I write in PHP 41 I will get ')' I googled an ASCII table and it's showing that the number for A is 065...
ASCII is a subset of UTF-8, so if a document is ASCII then it is already UTF-8
If it's already in UTF-8, why are those two numbers different? Also the outputs different..
РЕДАКТИРОВАТЬ, хорошо, поэтому на графике, который я смотрю, очевидно, отображаются цифры в значении HEX, которые я не сразу заметил, 41 в HEX — это ASCII 065
%c
в основном это функция int2bin, то есть она форматирует число в свое двоичное представление. Это идет до десятичного числа 255, которое будет выводиться как байт 0xFF
,
Чтобы вывести, скажем, символ снеговика ☃, вам нужно вывести точные байты, необходимые для представления его в выбранной кодировке. Если вы выбрали UTF-8 для его кодирования, необходимые байты E2 98 83
:
printf('%c%c%c', 226, 152, 131); // ☃
// or
printf('%c%c%c', 0xE2, 0x98, 0x83); // ☃
Проблема в вашем случае состоит в том, что 1) байты, которые вы выводите, ничего не значат в кодировке, в которой вы интерпретируете результат как (имеется в виду байт для 98
ничего не значит в UTF-8 на данный момент, поэтому вы видите » «) и 2) что вы echo
в результате printf
, который выводит 32 (printf
возвращает количество байтов, которые он выводит).
Других решений пока нет …