Почему текст показывает «&» и как это исправить
Опубликовано · Обновлено 2 мин чтения
Вы, вероятно, видели, как на сайте, в письме или на странице товара текст показывает «Tom & Jerry» вместо «Tom & Jerry». Это не поломка: HTML-сущность закодирована лишний раз. Это руководство объясняет, откуда берётся проблема и как её исправить.
Что такое HTML-сущность
В коде веб-страницы некоторые символы играют особую роль: «&» начинает сущность, знаки «<» и «>» обрамляют теги. Чтобы показать эти символы как есть, их заменяют последовательностью знаков, называемой сущностью. Пять из них распространены.
| Символ | Сущность |
|---|---|
| & | & |
| < | < |
| > | > |
| " | " |
| ' (прямой апостроф) | ' |
Откуда берётся двойное кодирование
Текст иногда проходит через две системы, каждая из которых кодирует: редактор, затем шаблон страницы. Каждый проход преобразует «&» предыдущей сущности. С помощью Кодировать и декодировать HTML-сущности кодирование «Tom & Jerry» даёт «Tom & Jerry», а кодирование этого результата даёт «Tom &amp; Jerry».
| Шаг | Полученный текст |
|---|---|
| Исходный текст | Tom & Jerry |
| Закодировано один раз | Tom & Jerry |
| Закодировано дважды | Tom &amp; Jerry |
Браузер при показе декодирует один уровень. Дважды закодированный текст поэтому отображается с «&» вместо «&».
Декодировать по одному уровню
Инструмент снимает один уровень сущностей за проход. Если в результате остаются сущности, режим «Оба» сообщает об этом, и вы снова запускаете декодирование над результатом.
| Текст | Первое декодирование | Второе декодирование |
|---|---|---|
| Tom &amp; Jerry | Tom & Jerry | Tom & Jerry |
| &lt;b&gt;gras&lt;/b&gt; | <b>gras</b> | <b>gras</b> |
Декодирование одного уровня помогает не отменить задуманное кодирование: пример кода, который должен показывать «&» на экране, записывается в странице как «&amp;».
Диакритика и символы
Декодирование понимает все именованные сущности, оканчивающиеся точкой с запятой, а не только пять обычных. «café à 5 € © 2026» даёт «café à 5 € © 2026», а неразрывный пробел становится настоящим неразрывным пробелом. Числовые сущности тоже декодируются: «été» даёт «été», а «😀» и «😀» дают один и тот же эмодзи.
Что инструмент оставляет нетронутым
- Неизвестная сущность вроде «&inconnue;» остаётся как есть.
- Сущность без завершающей точки с запятой, как «&» или «<» во фразе, не затрагивается.
- Адрес с параметрами, например «https://exemple.fr/?a=1¶m=2©=4», остаётся точным: «¶m» и «©» там не принимаются за сущности.
Кодирование кода для показа
Чтобы показать фрагмент кода на странице, закодируйте его один раз. Текст «<a href="x">l’été & plus</a>» даёт «<a href="x">l'été & plus</a>». Буквы с диакритикой не кодируются, только пять зарезервированных символов.
Как избежать проблемы
Кодируйте только один раз, в последний момент, когда текст записывается в страницу. Чтобы массово заменить остатки неудачного кодирования, подойдёт Найти и заменить. Веб-адреса подчиняются другому кодированию, объяснённому в Base64, хеш и закодированный адрес: чем они отличаются.
Где возникает проблема
На странице товара, в заголовке страницы, в автоматическом письме или в поле, импортированном с другого сайта: «&» становится «&», когда текст кодируется дважды.
Проверка результата
- Снова запускайте декодирование, пока инструмент сообщает об оставшихся сущностях.
- Сравните с исходным текстом на экране.
- Проверьте неразрывные пробелы и эмодзи.
Часто задаваемые вопросы
- Почему мой текст показывает «&»?
- HTML-сущность закодирована лишний раз. Браузер при показе декодирует один уровень, второй остаётся видимым.
- Как это исправить?
- Декодируйте по одному уровню с помощью инструмента, пока он не перестанет сообщать о сущностях.
- Декодирует ли инструмент диакритику?
- Да, все именованные сущности, оканчивающиеся точкой с запятой, и числовые сущности.
- Как избежать проблемы?
- Кодируйте только один раз, в последний момент, когда текст записывается в страницу.
