hebrev()
Функция hebrev() преобразует логический текст на иврите в визуальный текст для корректного отображения на веб-странице.
Функция PHP hebrev() преобразует логический текст на иврите (хранящийся в порядке набора — справа налево) в визуальный текст (расположенный слева направо, чтобы дисплей без поддержки RTL отображал его корректно). Это достигается за счёт обращения последовательности символов иврита в строке при сохранении читаемости знаков препинания и пробелов.
На этой странице описывается, что делала hebrev(), её синтаксис и параметры, запускаемые примеры, причины удаления функции и альтернативы для современного кода.
hebrev() была объявлена устаревшей в PHP 7.2 и полностью удалена в PHP 8.0. Вызов её в PHP 8+ вызывает ошибку Error: Call to undefined function hebrev(). Эта страница предназначена только для понимания и поддержки устаревшего кода. Для нового кода доверьте управление направлением браузеру с помощью HTML dir="rtl" или CSS direction: rtl — см. Почему функция была удалена и что использовать вместо неё.
Синтаксис
hebrev(string $string, int $max_chars_per_line = 0): string| Параметр | Обязательный | Описание |
|---|---|---|
$string | Да | Текст на иврите (в логическом порядке) для преобразования. |
$max_chars_per_line | Нет | Максимальное количество символов в строке для переноса слов. При значении 0 (по умолчанию) дополнительный перенос не применяется. |
Функция возвращает строку, преобразованную в визуальный порядок. Символы, не относящиеся к ивриту (ASCII-буквы, цифры, знаки препинания), остаются на своих местах.
Базовый пример
Простейшее использование hebrev() — преобразование логической строки на иврите в визуальный порядок:
Последовательность символов иврита обращается, и текст читается корректно в среде с направлением слева направо. Результат:
תירבע רבדמ ינא ,ןכПеренос строк с помощью $max_chars_per_line
Второй параметр вставляет переносы строк так, чтобы ни одна строка не превышала заданную ширину. Он действует только тогда, когда последовательность символов иврита длиннее ограничения — короткие строки, как в примере ниже, умещаются в одну строку, поэтому вывод идентичен базовому примеру. При значении 40 текст значительно короче ограничения и не переносится:
Результат:
תירבע רבדמ ינא ,ןכЧтобы перенос действительно сработал, последовательность символов иврита должна быть длиннее $max_chars_per_line; только тогда вставляются переносы строк.
Почему функция была удалена и что использовать вместо неё
hebrev() появилась до эпохи поддержки Unicode-двунаправленного рендеринга в браузерах. Трюк с «визуальным порядком» был необходим, когда терминалы и старые браузеры не могли самостоятельно переупорядочивать текст, идущий справа налево. Сегодня уровень рендеринга справляется с этим сам, поэтому обращение символов в PHP является одновременно избыточным и деструктивным (оно вносит информацию о компоновке прямо в данные).
Для нового кода сохраняйте текст в естественном логическом порядке, а направление задавайте в разметке:
<p dir="rtl">כן, אני מדבר עברית</p>Или с помощью CSS:
.hebrew { direction: rtl; }Браузер самостоятельно переупорядочит и перенесёт текст, а исходная строка останется чистой для поиска, копирования и хранения.
Родственная функция hebrevc() выполняла то же преобразование, дополнительно заменяя символы новой строки тегами <br>; она также была удалена в PHP 8.0 — современный CSS переносит строки автоматически.
Связанные функции
hebrevc()— то же преобразование, с дополнительным преобразованием символов новой строки в<br>(также удалена в PHP 8.0).strrev()— обращает каждый символ строки (не учитывает специфику иврита).wordwrap()— стандартный и по-прежнему поддерживаемый способ переноса текста на заданной ширине строки.nl2br()— вставляет HTML-переносы строк перед символами новой строки в строке.