Skip to content
Назад в блог

Почему иврит и английский меняются местами

3 мин. чтения
Почему иврит и английский меняются местами

Смешанная строка на иврите или арабском может выглядеть правильно в одном редакторе и развалиться после вставки в мессенджер, таблицу или HTML-поле. Латинское название перескакивает на другую сторону, телефон меняет позицию, а закрывающая скобка будто относится не к той фразе.

Обычно буфер обмена не переворачивает символы. Текст сохраняет логический порядок, а приложение вычисляет визуальный порядок по алгоритму Unicode Bidirectional Algorithm.

Сильный текст и нейтральная пунктуация

Буквы иврита и арабского относятся к сильным символам справа налево. Латиница, кириллица и греческие буквы относятся к сильным символам слева направо. У чисел есть собственное BiDi-поведение. Пробелы, двоеточия, скобки и многие знаки пунктуации нейтральны, поэтому их позиция зависит от направленных фрагментов вокруг.

Из-за этого URL, email, номер версии или телефон с +972 могут визуально сломать предложение, хотя каждый видимый символ остаётся корректным Unicode.

Изоляция цельного фрагмента

Современные Unicode isolates предназначены для самостоятельного фрагмента, направление которого отличается от направления абзаца:

  • LRI (U+2066) начинает LTR-isolate.
  • RLI (U+2067) начинает RTL-isolate.
  • FSI (U+2068) выбирает направление по первому сильному символу внутри.
  • PDI (U+2069) закрывает isolate.

Например, английский URL внутри иврита можно обернуть в LRI … PDI. Кодовые точки невидимы, но URL перестаёт влиять на остальное предложение. Для иврита внутри английского абзаца работает обратная пара RLI … PDI.

Важно правильно выбрать область: оборачивайте цельный направленный фрагмент. Не добавляйте controls внутрь слов, не разделяйте emoji grapheme sequence и не меняйте логический порядок символов ради одного визуального результата.

Когда нужны LRM и RLM

LRM (U+200E) и RLM (U+200F) являются невидимыми символами с сильным направлением. Они помогают локально исправить неоднозначность, особенно рядом с нейтральной пунктуацией. Парного контейнера они не создают, поэтому бесконтрольное добавление marks усложняет диагностику и поддержку текста.

Практическое правило: isolate подходит для целого слова, URL, числа или фразы. Mark нужен, когда двоеточию, скобке, тире или другому соседнему нейтральному знаку всё ещё требуется подсказка направления.

В старом тексте могут встречаться legacy controls LRE, RLE, LRO, RLO и PDF. Новая разметка обычно должна использовать isolates, а инспектор должен предупреждать о legacy и несбалансированных controls.

Выбор минимального профиля

Для обычной работы используйте Safe. Он распознаёт цельные URL, email, телефоны, даты, версии, пути, Markdown-ссылки и inline code, после чего изолирует весь фрагмент противоположного направления. Если следующий текст возвращается к направлению абзаца, завершающая пунктуация остаётся снаружи isolate. Поэтому точка после URL визуально оказывается на правильной стороне предложения на иврите или арабском.

Профиль Compatibility нужен для редакторов, которые неверно отображают isolates. Он ставит парные LRM или RLM на тех же границах. Clean only удаляет BiDi controls и не добавляет новых.

Форматтер должен отличать обычные isolates от подозрительного содержимого. Overrides RLO и LRO, сломанные пары и controls внутри URL или code token требуют предупреждения. Очистка должна удалять только опасные controls и сохранять корректные isolates, а также арабские ZWJ и ZWNJ.

Безопасный процесс редактирования

Хороший RTL-форматтер не меняет источник, строит редактируемый результат и показывает невидимые controls отдельным визуальным слоем. В самом textarea должны оставаться настоящие Unicode-символы, иначе копирование потеряет их.

Автоматика должна остановиться после первой ручной правки результата. Иначе изменение источника может незаметно стереть аккуратно поставленный LRM или RLM. Повторное автоматическое форматирование должно запускаться явно.

RTL Text Fixer работает полностью локально. В нём есть профили Safe, Compatibility и Clean only, объяснение каждого автоматического изменения, предупреждения об опасных controls, undo и redo для ручных правок, а также локальный импорт и экспорт plain-text файлов.

Похожие инструменты

Частые вопросы

Почему английское слово переносится не на ту сторону иврита?

Сами символы не обязательно поменялись местами. Алгоритм Unicode Bidirectional Algorithm отображает сильные RTL- и LTR-фрагменты с учётом окружения, а пробелы и пунктуация остаются нейтральными. Без явной границы слово или знак могут визуально оказаться с неожиданной стороны.

Чем LRM отличается от LRI?

LRM является невидимым LTR-символом, который влияет на соседние нейтральные знаки. LRI начинает изолированный LTR-фрагмент, а PDI закрывает его, поэтому содержимое не меняет направление окружающего абзаца. Для целого слова, числа, URL или фразы isolate обычно безопаснее.

Видны ли управляющие BiDi-символы после копирования?

Нет. Они остаются настоящими кодовыми точками в plain text, но обычно не имеют видимого глифа. Диагностический редактор может подписывать их без замены, а escaped-копия показывает значения вроде U+200E или U+2066.

Исправляют ли BiDi controls соединение арабских букв?

Нет. BiDi controls управляют направлением и визуальным порядком. За арабский shaping и соединение букв отвечают другие механизмы, включая ZWJ и ZWNJ. Их нельзя удалять как LRM, RLM или isolates.

Автор

Fullstack Engineer

В коммерческой разработке с 2011 года — больше 15 лет. Автор двух SaaS-продуктов: TeleGo.io и LingvoHabit.com. Статьи здесь выросли из реальной клиентской и продуктовой работы.

Подробнее об автореНаписать в Telegram

Похожие статьи

GZIP VS BROTLI
GZIP VS BROTLI · '26

Как патенты на LZW привели к gzip, а веб к Brotli

История gzip, DEFLATE и Brotli, устройство двух форматов сжатия и практический выбор между размером результата, скоростью кодирования и совместимостью.

#GZip vs Brotli #история сжатия данных #Jean-loup Gailly #Brotli Google #Deflate алгоритм #LZ77 Huffman
5 мин. чтения
СЖАТИЕ ИЗОБРАЖЕНИЙ
СЖАТИЕ ИЗОБРАЖЕНИЙ · '26

Оптимизация SVG, экспорт кода и сжатие изображений

Оптимизируйте и трансформируйте SVG, экспортируйте React, React Native, Vue, PNG или Data URI и сжимайте растровые изображения локально в браузере.

#сжатие изображений #WebP формат #оптимизация SVG #PNG vs JPEG #AVIF #SVGO
4 мин. чтения
ГЕНЕРАЦИЯ ТЕСТОВЫХ ДАННЫХ
ГЕНЕРАЦИЯ ТЕСТОВЫХ ДАННЫХ · '26

От ручных фикстур до Data Mocker в браузере

Почему реалистичные фикстуры лучше ручного JSON и как локальный Data Mocker создаёт JSON или CSV по схеме с 18 типами полей.

#генерация тестовых данных #Faker.js #mock data #тестовые фикстуры #Data Mocker #schema builder
3 мин. чтения