1

Chr: примеры (PHP)

Использование PHP функции chr для работы с символами
Раздел: Работа со строками
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

Функция 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

Частая ошибка – попытка получить символ 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)

Символы с кодами 0-31 являются управляющими и могут по-разному отображаться или обрабатываться.

История изменений функции

Функция chr существует с самых ранних версий PHP и остается стабильной. В PHP 8.0 были ужесточены правила приведения типов, но сигнатура функции не изменилась. До PHP 8.0 некорректные аргументы могли вызывать предупреждения, теперь происходит стандартное приведение к типу int.

Поведение с числами вне диапазона 0-255 (приведение по модулю 256) остается неизменным на протяжении всех версий для обеспечения обратной совместимости.

Расширенные примеры применения

Генерация строк из последовательности кодов

Функцию удобно использовать для генерации строк из массива чисел.

Пример php
<?php
$codes = [72, 101, 108, 108, 111];
$string = '';
foreach ($codes as $code) {
    $string .= chr($code);
}
echo $string; // Hello
?>
Hello
Формирование бинарных данных

chr полезна при создании бинарных протоколов или файлов, где требуется точное управление байтами.

Пример php
<?php
// Пример заголовка с длиной пакета (2 байта) и кодом команды (1 байт)
$length = 256; // 0x0100
$command = 0x0A;
$binary = chr($length >> 8) . chr($length & 0xFF) . chr($command);
echo bin2hex($binary); // 01000a
?>
01000a
Создание строки с нулевым байтом

Для создания строк, содержащих нулевые байты (например, для C-совместимых функций или бинарных форматов).

Пример php
<?php
$nullTerminated = 'Hello' . chr(0) . 'World';
echo strlen($nullTerminated); // 11, но вывод обрежется при печати
var_dump($nullTerminated);
?>
11
string(11) "Hello\x00World"
Работа с управляющими последовательностями

Генерация escape-последовательностей для терминалов или специфических протоколов.

Пример php
<?php
// CSI-последовательность для очистки экрана (ESC [ 2 J)
$clearScreen = chr(27) . '[2J';
echo $clearScreen; // В терминале очистит экран
?>
(выполняет действие в терминале)
Преобразование массива чисел в строку

Альтернатива pack() для простых случаев.

Пример php
<?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.

PHP chr function comments

En
Chr Generate a single-byte string from a number