Ord: примеры (PHP)
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() выполняет обратную операцию - возвращает символ по его ASCII-коду. Работает в диапазоне 0-255. Используется вместе с ord() для преобразований между символами и их кодами.
Функция mb_ord() возвращает код Unicode для первого символа строки с учетом многобайтовой кодировки. Предпочтительнее использовать для работы с символами за пределами ASCII (кириллица, иероглифы и т.д.).
Метод класса 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, функция ord() не имеет существенных изменений в поведении. Основная семантика функции осталась прежней.
В PHP 8.x функция продолжает работать в соответствии с оригинальной спецификацией. Добавлены строгие типы, но для ord() это не привело к изменениям, так как она всегда принимала строковый аргумент.
Для работы с многобайтовыми кодировками в современных версиях PHP рекомендуется использовать функции mbstring (mb_ord) или расширение Intl.
Расширенные примеры применения
Определение типа символа по его коду:
<?
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
Простой пример шифрования:
<?
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
Определение типа файла по сигнатуре (магическим числам):
<?
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';
}
}
?>Простой алгоритм хэширования:
<?
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() для быстрого сравнения первых символов:
<?
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)); // 107165 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.