W3docs

ord()

Статья о функции PHP ord(), которая возвращает ASCII-значение первого символа строки. Полезна при работе с кодами символов.

Функция PHP ord() возвращает байтовое значение (0–255) первого символа строки. Для обычного ASCII-текста это код символа — например, 'A' даёт 65. Она является обратной к chr(), которая преобразует число обратно в символ.

На этой странице рассматривается синтаксис ord(), поведение функции при передаче различных строк, распространённая ошибка с многобайтовыми символами и практические случаи, когда преобразование символа в числовой код действительно полезно.

Синтаксис

ord(string $character): int

ord() принимает один аргумент — строку для анализа — и возвращает целое число. Проверяется только первый символ; остальная часть строки игнорируется.

ПараметрОписание
$characterСтрока, числовое значение первого символа (байта) которой нужно получить.

Базовый пример

php— editable, runs on the server

Вывод:

72

72 — это код символа "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() — показывает необработанные байты строки в шестнадцатеричном виде.

Практика

Практика
Что делает функция ord() в PHP?
Что делает функция ord() в PHP?
Was this page helpful?