Какие символы необходимо экранировать в HTML?

Они такие же, как XML, возможно, плюс пробел (&ampnbsp;)?

Я нашел некоторые огромные списки HTML escape-символов, но я не думаю, что они должны быть экранированы. Я хочу знать, что!--3-->должен сбежать.

4 ответов


если ваш документ является unicode, вам нужно только избежать тех же, что и для XML в вашем тексте [spec] [doc]:

& becomes &
< becomes &lt;
> becomes &gt;

в значениях атрибутов вы должны также избежать кавычки [spec]:

" becomes &quot;
' becomes &#39;

если ваш документ является ASCII или другой кодировкой, отличной от Unicode, и вы используете символы, которые не поддерживаются, вам нужно будет избежать их. В противном случае, вы штраф в размере1.

вы обычно не хотите, чтобы избежать пробелов, как &nbsp;. &nbsp; не является нормальным пространством, это неразрывное пространство [wiki]. Вы можете использовать их вместо обычных пробелов, чтобы предотвратить вставку разрыва строки между двумя словами или вставить дополнительное пространство без его автоматического сворачивания, но вам не нужно будет делать это очень часто.


1 Вы в порядке, пока вы вставляете экранированный текст где-то, что имеет смысл вставлять обычный текст (т. е. не внутри <style> или <script> tag, а не внутри значения атрибута). В противном случае вы должны принять другие меры предосторожности, как указано в daxelrod это и описано здесь проектом Open Web Application Security.


Это зависит от контекста. Некоторые возможные контексты в HTML:

  • тело документа
  • внутри общих атрибутов
  • внутри тегов сценария
  • внутри тегов типа
  • еще несколько!

см. OWASP Шпаргалка Предотвращения Межсайтовых Сценариев, особенно "почему я не могу просто HTML-объект кодировать ненадежные данные?" и "правила предотвращения XSS" разделы. Однако лучше всего прочитать весь документ.


в принципе, есть три основных символов который должен быть всегда экранирован в ваших HTML и XML-файлах, поэтому они не взаимодействуют с остальными наценками, так что, как вы, вероятно, ожидаете, два из них будут синтаксическими оболочками, которые являются, они перечислены ниже:

 1)  &lt; (<)

 2)  &gt; (>)

 3)  &amp; (&)

также мы можем использовать double-quote ( ") as "и single quote (' ) as &apos

избегайте размещения динамического контента в <script> и <style>.Эти правила не для подал на них заявление. Например, если вам нужно включить JSON в a , замените

HTML Escape-символы: полный список: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php

таким образом, вам нужно бежать

переход на UTF-8 означает повторное сохранение файла:

Используя кодировку UTF-8 для вашей страницы означает, что вы можете избежать необходимости большинство убегает и просто работает с персонажами. Заметим, однако, что измените кодировку вашего документа, этого недостаточно просто изменить объявление кодировки в верхней части страницы или на сервере. Вы необходимо повторно сохранить документ в этой кодировке. Для облегчения понимания как это сделать с помощью кодировки параметров чтения приложения в web исходное приложение.

невидимые или неоднозначные символы:

особенно полезной ролью для escapes является представление символов, которые невидимы или неоднозначны в изложении.

один пример будет символ Юникода U + 200F справа налево. Этот символ может использоваться для уточнения направленности в двунаправленном тексте (напр. при использовании арабского или иврита). Не имеет графической формы, однако, поэтому трудно увидеть, где эти персонажи находятся в текст, и если они потеряны или забыты, они могут создать неожиданные результаты при последующем редактировании. Использование (или его числового символа эквивалент ссылки) вместо этого делает его очень легким обнаружить эти письмена.

примером неоднозначного символа является пространство без перерыва U+00A0. Этот тип пространства предотвращает разрыв линии, но он выглядит так же, как и любой другой пространства при использовании в качестве символа. Используя делает вполне понятно откуда такие пробелы в тексте.


точный ответ зависит от контекста. В общем, эти символы не должны присутствовать (HTML 5.2 §3.2.4.2.5):

текстовые узлы и значения атрибутов должны состоять из символов Юникода, не должны содержать символов U+0000, не должны содержать постоянно неопределенных символов Юникода (нехарактерных) и не должны содержать управляющих символов, отличных от пробелов. Эта спецификация включает дополнительные ограничения на точное значение текстовых узлов и значения атрибутов в зависимости от их точного контекста.

для элементов в HTML ограничения модели текстового содержимого также зависят от типа элемента. Например, "

эти ограничения разбросаны по спецификации. Например, значения атрибутов (§8.1.2.3) не должно содержать неоднозначное амперсанд!--4--> и (i) пустыми, (ii) в одинарных кавычках (и, следовательно, не должен содержать U+0027 Апостроф '),(iii) в двойных кавычках (не должно содержать символ кавычки U+0022 "), или (iv) без кавычек - со следующими ограничениями:

... не должно содержать буквенных пробелов, кавычек U + 0022 ( " ), символов Апострофа U + 0027 ('), U+003D равно знаковые символы ( = ), U+003C меньше, чем знаковые символы ( ), или U+0060 серьезные акцентные символы ( ` ) и не должны быть пустой строкой.