W3docs

str_rot13()

Статья о PHP-функции str_rot13(), выполняющей кодирование ROT13 строки посредством простой замены букв.

Функция str_rot13() в PHP выполняет кодирование ROT13 для строки. ROT13 — это простой шифр подстановки, который заменяет каждый буквенный символ буквой, стоящей на 13 позиций вперёд в алфавите. Небуквенные символы остаются без изменений.

Синтаксис функции str_rot13() выглядит следующим образом:

PHP-синтаксис str_rot13()

str_rot13($string)

Функция принимает один обязательный параметр: $string. $string — это строка, которую необходимо закодировать с помощью ROT13. Обратите внимание, что str_rot13() обрабатывает только символы ASCII и игнорирует многобайтовые UTF-8 символы. Преобразуются только буквенные символы; все остальные символы остаются без изменений.

Вот пример использования функции str_rot13():

Пример PHP str_rot13()

php— editable, runs on the server

В этом примере у нас есть строковая переменная $string, содержащая фразу "Hello, World!". Мы используем функцию str_rot13() для выполнения кодирования ROT13, передавая переменную $string в качестве параметра.

Результат выполнения этого кода:

Uryyb, Jbeyq!

Как видно, функция str_rot13() успешно закодировала исходную строку с помощью ROT13.

ROT13 является обратным к самому себе

Наиболее полезное свойство ROT13 заключается в том, что кодирование и декодирование — это одна и та же операция. Поскольку алфавит состоит из 26 букв, а ROT13 сдвигает ровно на половину, двукратное применение функции поворачивает букву на полные 13 + 13 = 26 позиций, возвращая её на исходное место. Это означает, что для получения исходной строки достаточно повторно вызвать str_rot13() — отдельной функции str_unrot13() не существует.

<?php
$plain   = "Hello, World!";
$encoded = str_rot13($plain);          // Uryyb, Jbeyq!
$decoded = str_rot13($encoded);        // Hello, World!

echo $encoded . "\n";
echo $decoded . "\n";
?>

Результат выполнения этого кода:

Uryyb, Jbeyq!
Hello, World!

Что подвергается преобразованию

Только 52 ASCII-буквы (az и AZ) сдвигаются. Регистр сохраняется, а все остальные символы — цифры, знаки препинания, пробелы и многобайтовые UTF-8 символы — передаются без изменений.

<?php
echo str_rot13("PHP 7.4 — café") . "\n";
?>

Результат выполнения этого кода:

CUC 7.4 — pnsé

Обратите внимание: 7.4, пробелы и длинное тире остаются без изменений, символ é с ударением также не затрагивается (это многобайтовый символ, а не ASCII), тогда как ASCII-буквы сдвигаются на 13 позиций: PC, HU, cp, an, fs.

Когда использовать

ROT13 удобен для сокрытия текста от случайного взгляда — теги спойлеров на форумах, ответы на загадки или лёгкое скрытие адреса электронной почты в исходном коде. Поскольку он сохраняет длину строки и обратим единственным вызовом, он также является распространённым учебным примером шифра подстановки.

Его никогда не следует использовать для защиты конфиденциальной информации: ROT13 не имеет ключа и тривиально обращается кем угодно. Для реальной защиты используйте password_hash() для паролей или расширения Sodium / OpenSSL для шифрования.

Связанные функции

  • strrev() — переворачивает символы строки в обратном порядке.
  • str_replace() — заменяет подстроки внутри строки.
  • substr_replace() — заменяет часть строки по позиции.

Практика

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