Все руководства

Почему текст показывает «&» и как это исправить

Опубликовано · Обновлено 2 мин чтения

Вы, вероятно, видели, как на сайте, в письме или на странице товара текст показывает «Tom & Jerry» вместо «Tom & Jerry». Это не поломка: HTML-сущность закодирована лишний раз. Это руководство объясняет, откуда берётся проблема и как её исправить.

Что такое HTML-сущность

В коде веб-страницы некоторые символы играют особую роль: «&» начинает сущность, знаки «<» и «>» обрамляют теги. Чтобы показать эти символы как есть, их заменяют последовательностью знаков, называемой сущностью. Пять из них распространены.

СимволСущность
&&amp;
<&lt;
>&gt;
"&quot;
' (прямой апостроф)&#039;

Откуда берётся двойное кодирование

Текст иногда проходит через две системы, каждая из которых кодирует: редактор, затем шаблон страницы. Каждый проход преобразует «&» предыдущей сущности. С помощью Кодировать и декодировать HTML-сущности кодирование «Tom & Jerry» даёт «Tom &amp; Jerry», а кодирование этого результата даёт «Tom &amp;amp; Jerry».

ШагПолученный текст
Исходный текстTom & Jerry
Закодировано один разTom &amp; Jerry
Закодировано дваждыTom &amp;amp; Jerry

Браузер при показе декодирует один уровень. Дважды закодированный текст поэтому отображается с «&amp;» вместо «&».

Декодировать по одному уровню

Инструмент снимает один уровень сущностей за проход. Если в результате остаются сущности, режим «Оба» сообщает об этом, и вы снова запускаете декодирование над результатом.

ТекстПервое декодированиеВторое декодирование
Tom &amp;amp; JerryTom &amp; JerryTom & Jerry
&amp;lt;b&amp;gt;gras&amp;lt;/b&amp;gt;&lt;b&gt;gras&lt;/b&gt;<b>gras</b>

Декодирование одного уровня помогает не отменить задуманное кодирование: пример кода, который должен показывать «&amp;» на экране, записывается в странице как «&amp;amp;».

Диакритика и символы

Декодирование понимает все именованные сущности, оканчивающиеся точкой с запятой, а не только пять обычных. «caf&eacute; &agrave; 5&nbsp;&euro; &copy; 2026» даёт «café à 5 € © 2026», а неразрывный пробел становится настоящим неразрывным пробелом. Числовые сущности тоже декодируются: «&#233;t&#xE9;» даёт «été», а «&#x1F600;» и «&#128512;» дают один и тот же эмодзи.

Что инструмент оставляет нетронутым

  • Неизвестная сущность вроде «&inconnue;» остаётся как есть.
  • Сущность без завершающей точки с запятой, как «&amp» или «&lt» во фразе, не затрагивается.
  • Адрес с параметрами, например «https://exemple.fr/?a=1&param=2&copy=4», остаётся точным: «&param» и «&copy» там не принимаются за сущности.

Кодирование кода для показа

Чтобы показать фрагмент кода на странице, закодируйте его один раз. Текст «<a href="x">l’été & plus</a>» даёт «&lt;a href=&quot;x&quot;&gt;l&#039;été &amp; plus&lt;/a&gt;». Буквы с диакритикой не кодируются, только пять зарезервированных символов.

Как избежать проблемы

Кодируйте только один раз, в последний момент, когда текст записывается в страницу. Чтобы массово заменить остатки неудачного кодирования, подойдёт Найти и заменить. Веб-адреса подчиняются другому кодированию, объяснённому в Base64, хеш и закодированный адрес: чем они отличаются.

Где возникает проблема

На странице товара, в заголовке страницы, в автоматическом письме или в поле, импортированном с другого сайта: «&» становится «&amp;», когда текст кодируется дважды.

Проверка результата

  1. Снова запускайте декодирование, пока инструмент сообщает об оставшихся сущностях.
  2. Сравните с исходным текстом на экране.
  3. Проверьте неразрывные пробелы и эмодзи.

HTML-сущности

Часто задаваемые вопросы

Почему мой текст показывает «&amp;»?
HTML-сущность закодирована лишний раз. Браузер при показе декодирует один уровень, второй остаётся видимым.
Как это исправить?
Декодируйте по одному уровню с помощью инструмента, пока он не перестанет сообщать о сущностях.
Декодирует ли инструмент диакритику?
Да, все именованные сущности, оканчивающиеся точкой с запятой, и числовые сущности.
Как избежать проблемы?
Кодируйте только один раз, в последний момент, когда текст записывается в страницу.

Автор: Lmaotools