Chr: примеры (PHP)
chr(int $codepoint): stringФункция chr в PHP
Функция chr в PHP генерирует однобайтовую строку по числовому значению ASCII-кода. Она применяется для преобразования числовых кодов в соответствующие символы, что часто требуется при работе с бинарными данными, протоколами, генерации строк или обработке символов вне стандартного текстового диапазона.
Синтаксис функции прост: chr(int $codepoint): string
Аргумент $codepoint – целое число (int), которое представляет код ASCII. Диапазон значений от 0 до 255. Для значений больше 255 используется арифметика по модулю 256 ($codepoint & 0xFF), что означает, что chr(256) вернет тот же результат, что и chr(0).
Функция возвращает строку, состоящую из одного символа, соответствующего переданному коду.
Простые примеры использования
Стандартное использование для печатаемых символов:
<?php
echo chr(65); // Код для 'A'
?>A
Использование с кодом для перевода строки:
<?php
echo 'Строка 1' . chr(10) . 'Строка 2'; // LF (\n)
?>Строка 1 Строка 2
При передаче числа больше 255 происходит преобразование по модулю 256:
<?php
echo chr(321); // 321 % 256 = 65
?>A
Работа с отрицательными значениями (используется расширение знака до 64-битного целого и последующее взятие по модулю 256):
<?php
echo chr(-159); // -159 % 256 = 97 (при приведении к беззнаковому байту)
?>a
Похожие функции в PHP
В PHP есть несколько функций для преобразования между символами и их кодами.
Функция ord(string $character): int выполняет обратную операцию – возвращает ASCII-код первого символа строки. Это основной парный инструмент для chr.
<?php
echo ord('A'); // 65
?>65
Для работы с символами Unicode (UTF-8) используются функции mb_chr и mb_ord из расширения mbstring. Они работают с кодовыми точками Unicode.
<?php
// Требуется расширение mbstring
echo mb_chr(0x20AC, 'UTF-8'); // Символ евро (€)
?>€
Выбор между chr и mb_chr зависит от кодировки данных. Для однобайтовых кодировок (ASCII, cp1251) используют chr, для многобайтовых (UTF-8) – mb_chr.
Типичные ошибки и нюансы
Частая ошибка – попытка получить символ Unicode с помощью chr. Функция работает только с ASCII.
<?php
echo chr(8364); // Ожидается символ евро (€)
?>\x84 (символ в кодировке CP1252, а не евро)
Передача нецелочисленного аргумента приводит к его преобразованию в целое число, что может дать неожиданный результат.
<?php
echo chr(65.9); // float будет приведен к int(65)
echo chr('65text'); // string будет приведен к int(65)
?>A A
Хотя результат может быть правильным, рекомендуется явно приводить тип к integer.
Символы с кодами 0-31 являются управляющими и могут по-разному отображаться или обрабатываться.
История изменений функции
Функция chr существует с самых ранних версий PHP и остается стабильной. В PHP 8.0 были ужесточены правила приведения типов, но сигнатура функции не изменилась. До PHP 8.0 некорректные аргументы могли вызывать предупреждения, теперь происходит стандартное приведение к типу int.
Поведение с числами вне диапазона 0-255 (приведение по модулю 256) остается неизменным на протяжении всех версий для обеспечения обратной совместимости.
Расширенные примеры применения
Функцию удобно использовать для генерации строк из массива чисел.
<?php
$codes = [72, 101, 108, 108, 111];
$string = '';
foreach ($codes as $code) {
$string .= chr($code);
}
echo $string; // Hello
?>Hello
chr полезна при создании бинарных протоколов или файлов, где требуется точное управление байтами.
<?php
// Пример заголовка с длиной пакета (2 байта) и кодом команды (1 байт)
$length = 256; // 0x0100
$command = 0x0A;
$binary = chr($length >> 8) . chr($length & 0xFF) . chr($command);
echo bin2hex($binary); // 01000a
?>01000a
Для создания строк, содержащих нулевые байты (например, для C-совместимых функций или бинарных форматов).
<?php
$nullTerminated = 'Hello' . chr(0) . 'World';
echo strlen($nullTerminated); // 11, но вывод обрежется при печати
var_dump($nullTerminated);
?>11 string(11) "Hello\x00World"
Генерация escape-последовательностей для терминалов или специфических протоколов.
<?php
// CSI-последовательность для очистки экрана (ESC [ 2 J)
$clearScreen = chr(27) . '[2J';
echo $clearScreen; // В терминале очистит экран
?>(выполняет действие в терминале)
Альтернатива pack() для простых случаев.
<?php
$array = [80, 72, 80];
$result = array_reduce($array, fn($carry, $code) => $carry . chr($code), '');
echo $result;
?>PHP
Аналоги функции в других языках
Chr в Python
В Python функция chr() работает с кодовыми точками Unicode и возвращает соответствующий символ. Диапазон значений от 0 до 0x10FFFF.
print(chr(65)) # 'A'
print(chr(8364)) # '€'A €
Chr в Javascript
В JavaScript используется метод String.fromCharCode(). Он принимает один или несколько числовых значений кодов Unicode (UTF-16) и возвращает строку.
console.log(String.fromCharCode(65)); // 'A'
console.log(String.fromCharCode(0x20AC)); // '€'A €
Chr в MySQL
В MySQL есть функция CHAR(), которая возвращает строку, составленную из символов, соответствующих переданным числовым кодам (в кодировке соединения).
SELECT CHAR(65, 66, 67);ABC
Основное отличие PHP-функции chr от аналогов в Python и JavaScript – ее ориентация на однобайтовые коды ASCII, а не на Unicode.