ord()
Статья о функции PHP ord(), которая возвращает ASCII-значение первого символа строки. Полезна при работе с кодами символов.
Функция PHP ord() возвращает байтовое значение (0–255) первого символа строки. Для обычного ASCII-текста это код символа — например, 'A' даёт 65. Она является обратной к chr(), которая преобразует число обратно в символ.
На этой странице рассматривается синтаксис ord(), поведение функции при передаче различных строк, распространённая ошибка с многобайтовыми символами и практические случаи, когда преобразование символа в числовой код действительно полезно.
Синтаксис
ord(string $character): intord() принимает один аргумент — строку для анализа — и возвращает целое число. Проверяется только первый символ; остальная часть строки игнорируется.
| Параметр | Описание |
|---|---|
$character | Строка, числовое значение первого символа (байта) которой нужно получить. |
Базовый пример
Вывод:
7272 — это код символа "H", первого символа строки "Hello". Поскольку имеет значение только первый символ, ord('ABC') и ord('A') оба возвращают 65.
Часто встречающиеся значения
Ниже приведены коды, с которыми вы будете сталкиваться чаще всего при работе с текстом:
<?php
echo ord('A'), "\n"; // 65 — start of uppercase letters
echo ord('a'), "\n"; // 97 — start of lowercase letters
echo ord('0'), "\n"; // 48 — start of digit characters
echo ord(' '), "\n"; // 32 — space
echo ord("\n"), "\n"; // 10 — newline (line feed)
echo ord(''), "\n"; // 0 — empty string yields 0
?>Вывод:
65
97
48
32
10
0Обратите внимание на последнюю строку: передача пустой строки не вызывает ошибку — ord('') просто возвращает 0.
Ошибка с многобайтовыми символами
ord() работает с байтами, а не с символами Unicode. Символ за пределами базового диапазона ASCII (например, é, € или любой эмодзи) хранится в UTF-8 как несколько байт, и ord() возвращает только значение первого байта:
<?php
echo ord('é'); // 195, not the Unicode code point 233
?>Вывод:
195Если вам нужна настоящая кодовая точка Unicode для многобайтового символа, используйте вместо неё mb_ord() (из расширения mbstring):
<?php
echo mb_ord('é', 'UTF-8'); // 233
?>Когда использовать ord()
Преобразование символа в число позволяет выполнять арифметику и сравнения, которые неудобно делать с самим символом.
Смена регистра вручную. Буквы в верхнем и нижнем регистре отстоят ровно на 32 в ASCII, поэтому можно переключать регистр, прибавляя или вычитая 32 с помощью ord() и chr():
<?php
$char = 'A';
echo chr(ord($char) + 32); // a
?>Вывод:
aПроверка каждого символа строки. Используйте цикл с strlen() и обращайтесь к символам по индексу, чтобы узнать код каждого символа — удобно для отладки проблем с кодировкой или создания простого шифра:
<?php
$s = 'PHP';
for ($i = 0; $i < strlen($s); $i++) {
echo $s[$i] . '=' . ord($s[$i]) . ' ';
}
?>Вывод:
P=80 H=72 P=80 Валидация ввода. Поскольку буквы и цифры занимают известные диапазоны, можно проверить категорию символа с помощью числового сравнения, например ord($c) >= 48 && ord($c) <= 57, чтобы убедиться, что $c является цифрой.
Связанные функции
chr()— обратная функция: возвращает символ по заданному ASCII/байтовому значению.strlen()— количество байт в строке, полезно для перебора символов.str_split()— разбивает строку на массив символов.substr()— извлекает часть строки.bin2hex()— показывает необработанные байты строки в шестнадцатеричном виде.