1

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

Работа с функцией ord для получения кодов символов
Раздел: Работа со строками
ord(string $character): int

Функция ord в PHP

Назначение и описание

Функция ord() возвращает ASCII-код первого символа переданной строки. Она принимает строку в качестве аргумента и возвращает целое число от 0 до 255, которое соответствует коду символа в таблице ASCII.

Аргументы функции

Функция принимает один обязательный параметр:

  • string (строка) - строка, для которой необходимо получить код первого символа. Если передана пустая строка, функция возвращает 0.
Возвращаемое значение

Функция возвращает код символа как целое число. Для символов ASCII возвращается значение от 0 до 255. Для многобайтовых символов (например, UTF-8) функция возвращает значение первого байта, что может не соответствовать Unicode-коду символа. Для получения Unicode-кода символа рекомендуется использовать функцию mb_ord().

Примеры использования

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

Получение кода для латинских букв и цифр:

<?
echo ord('A'); // 65
echo ord('a'); // 97
echo ord('1'); // 49
?>
65
97
49

Работа со специальными символами:

<?
echo ord('\n'); // 10 (перевод строки)
echo ord(' ');  // 32 (пробел)
echo ord('$');  // 36 (знак доллара)
?>
10
32
36
Особые случаи

Передача пустой строки и строки с несколькими символами:

<?
echo ord('');   // 0
echo ord('ABC'); // 65 (код только первого символа 'A')
?>
0
65

Похожие функции в PHP

chr()

Функция chr() выполняет обратную операцию - возвращает символ по его ASCII-коду. Работает в диапазоне 0-255. Используется вместе с ord() для преобразований между символами и их кодами.

mb_ord()

Функция mb_ord() возвращает код Unicode для первого символа строки с учетом многобайтовой кодировки. Предпочтительнее использовать для работы с символами за пределами ASCII (кириллица, иероглифы и т.д.).

IntlChar::ord()

Метод класса IntlChar также возвращает код Unicode для символа. Работает с полным диапазоном символов Unicode и является частью расширения Internationalization.

Рекомендации по выбору

Для работы только с символами ASCII (0-255) достаточно функции ord(). Для многобайтовых кодировок (UTF-8) следует использовать mb_ord(). IntlChar::ord() подходит для сложной работы с Unicode.

Типичные ошибки

Передача не строкового значения

Функция ожидает строковый аргумент. Передача других типов данных может привести к неожиданным результатам.

<?
echo ord(65);      // 54 (код символа '6')
echo ord(true);    // 49 (код символа '1')
echo ord(null);    // 0
?>
54
49
0
Работа с многобайтовыми символами

Функция ord() не корректно работает с символами UTF-8, возвращая код только первого байта.

<?
echo ord('€'); // 226 (код первого байта, а не полный код евро-символа 8364)
echo mb_ord('€'); // 8364 (корректный код Unicode)
?>
226
8364
Ожидание кода для всех символов строки

Некоторые разработчики ошибочно полагают, что ord() обрабатывает всю строку.

<?
// Неправильное ожидание
$codes = ord('Hello'); // Возвращает только код 'H'
// Правильный подход
$codes = array_map('ord', str_split('Hello'));
print_r($codes);
?>
Array
(
    [0] => 72
    [1] => 101
    [2] => 108
    [3] => 108
    [4] => 111
)

Изменения в последних версиях PHP

PHP 7.0 и новее

Начиная с PHP 7.0, функция ord() не имеет существенных изменений в поведении. Основная семантика функции осталась прежней.

PHP 8.x

В PHP 8.x функция продолжает работать в соответствии с оригинальной спецификацией. Добавлены строгие типы, но для ord() это не привело к изменениям, так как она всегда принимала строковый аргумент.

Рекомендации

Для работы с многобайтовыми кодировками в современных версиях PHP рекомендуется использовать функции mbstring (mb_ord) или расширение Intl.

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

Проверка диапазонов символов

Определение типа символа по его коду:

Пример php
<?
function charType($char) {
    $code = ord($char);
    if ($code >= 48 && $code <= 57) return 'digit';
    if ($code >= 65 && $code <= 90) return 'uppercase';
    if ($code >= 97 && $code <= 122) return 'lowercase';
    return 'other';
}

echo charType('5'); // digit
echo charType('X'); // uppercase
echo charType('z'); // lowercase
echo charType('#'); // other
?>
digit
uppercase
lowercase
other
Шифрование сдвигом (шифр Цезаря)

Простой пример шифрования:

Пример php
<?
function caesarEncrypt($text, $shift) {
    $result = '';
    for ($i = 0; $i < strlen($text); $i++) {
        $char = $text[$i];
        $code = ord($char);
        $result .= chr($code + $shift);
    }
    return $result;
}

echo caesarEncrypt('ABC', 3); // DEF
?>
DEF
Анализ первых символов файла

Определение типа файла по сигнатуре (магическим числам):

Пример php
<?
function getFileType($filename) {
    $handle = fopen($filename, 'r');
    $firstByte = fread($handle, 1);
    fclose($handle);
    
    $code = ord($firstByte);
    
    switch ($code) {
        case 0xFF: return 'JPEG';
        case 0x89: return 'PNG';
        case 0x47: return 'GIF';
        case 0x42: return 'BMP';
        default: return 'Unknown';
    }
}
?>
Создание хэша на основе кодов символов

Простой алгоритм хэширования:

Пример php
<?
function simpleHash($str) {
    $hash = 0;
    for ($i = 0; $i < strlen($str); $i++) {
        $hash = (($hash << 5) - $hash) + ord($str[$i]);
        $hash = $hash & 0xFFFFFFFF;
    }
    return $hash;
}

echo simpleHash('test'); // 3556498
?>
3556498
Оптимизация сравнений

Использование ord() для быстрого сравнения первых символов:

Пример php
<?
function startsWithType($str) {
    $firstChar = $str[0] ?? '';
    $code = ord($firstChar);
    
    // Быстрая проверка по кодам ASCII
    if ($code === 35) return 'hashtag'; // #
    if ($code === 64) return 'mention'; // @
    if ($code === 36) return 'currency'; // $
    
    return 'regular';
}

echo startsWithType('#tag'); // hashtag
echo startsWithType('@user'); // mention
?>
hashtag
mention

Аналоги в других языках

Ord в Python

Функция ord() работает аналогично, но возвращает код Unicode для любого символа, а не только ASCII.

print(ord('A'))  # 65
print(ord('Я'))  # 1071 (код Unicode)
65
1071

Ord в Javascript

Метод String.prototype.charCodeAt() возвращает код Unicode для символа по указанному индексу.

console.log('A'.charCodeAt(0)); // 65
console.log('Я'.charCodeAt(0)); // 1071
65
1071

Ord в MySQL

Функция ORD() возвращает числовое значение первого символа строки. Для многобайтовых символов возвращает значение, вычисленное по формуле.

SELECT ORD('A'); -- 65
SELECT ORD('Привет'); -- 207 (код первого байта 'П' в UTF-8)
65
207
Основные отличия

В отличие от PHP, функции в Python и JavaScript изначально работают с Unicode, а не только с ASCII. MySQL функция ORD() ведет себя похоже на PHP при работе с UTF-8.

PHP ord function comments

En
Ord Convert the first byte of a string to a value between 0 and 255