Какие символы должны быть экранированы на HTML?
Они такие же, как XML, возможно, плюс пробел ( )?
Я нашел несколько огромных списков HTML escape-символов, но я не думаю, что они должны быть экранированы. Я хочу знать, что должен чтобы сбежать.
4 ответа:
если ваш документ unicode, вам нужно только избежать тех же, что и для XML в вашем тексте [ spec] [doc]:
& becomes & < becomes < > becomes >
в значениях атрибутов вы также должны избегать символа кавычки [ spec]:
" becomes " ' becomes '
если ваш документ является ASCII или другой кодировкой, отличной от Unicode, и вы используете символы, которые не поддерживаются, вам нужно будет их экранировать. В противном случае, вы штраф в размере1.
вы обычно не хотите, чтобы избежать пробелов, как
.
это не нормальное пространство, это неразрывный пробел [ wiki]. Вы можете использовать их вместо обычных пробелов, чтобы предотвратить разрыв строки между двумя словами или вставить дополнительное пространство без его автоматического сворачивания, но вам не нужно будет делать это очень часто.
1 Вы в порядке, пока вы вставляете экранированный текст где-то, что имеет смысл вставить обычный текст (т. е. не внутри
<style>
или<script>
тега, а не внутри значения атрибута). В противном случае вы должны принять другие меры предосторожности, как указано в daxelrod это и описанный здесь проект по обеспечению безопасности открытых веб приложений.
Это зависит от контекста. Некоторые возможные контексты в HTML:
- тело документа
- внутри общих атрибутов
- внутри тегов сценария
- внутри тегов типа
- еще несколько!
смотрите OWASP Кросс-Сайт Сценариев Предотвращения Шпаргалка, особенно "почему я не могу просто HTML-объект кодировать ненадежные данные?" и "правила предотвращения XSS" разделы. Тем не менее, лучше всего прочитать весь документ.
в принципе, есть три основных символов который всегда должен быть экранирован в ваших HTML и XML-файлах, поэтому они не взаимодействуют с остальными разметками, так что, как вы, вероятно, ожидаете, два из них будут синтаксическими оболочками, которые, они перечислены ниже:
1) < (<) 2) > (>) 3) & (&)
также мы можем использовать двойную кавычку ( ") как "и одинарную кавычку (' ) как &apos
избегайте размещения динамического контента в
<script>
и<style>
.Эти правила не для подал на них заявку. Например , если вам нужно включить JSON в a, заменитеHTML Escape символы: полный список: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php
поэтому вам нужно бежать
переход на UTF-8 означает повторное сохранение файла:
Используя кодировку UTF-8 для вашей страницы означает, что вы можете избежать необходимости большинство убегает и просто работает с персонажами. Обратите внимание, однако, что измените кодировку вашего документа, этого недостаточно просто изменить объявление кодировки в верхней части страницы или на сервере. Вы необходимо повторно сохранить документ в этой кодировке. Для облегчения понимания как это сделать с вашим приложением чтение настройки кодировки в интернете исходное приложение.невидимые или неоднозначные символы:
особенно полезной ролью для экранирования является представление символов, которые невидимы или неоднозначны в представлении.
один пример будет символ Юникода U + 200F справа налево знак. Этот символ может быть использован для уточнения направленности в двунаправленном тексте (напр. при использовании арабского или иврита). Он не имеет графической формы, однако, так что трудно увидеть, где эти символы находятся в текст, и если они потеряны или забыты, они могут создать неожиданные результаты при последующем редактировании. Использование (или его числовой символ ссылка эквивалент) вместо этого делает его очень легко обнаружить эти письмена.
примером неоднозначного символа является U + 00A0 без перерыва. Этот тип пространства предотвращает разрыв линии, но он выглядит так же, как и любой другой пространства при использовании в качестве символа. Использование делает его вполне понятно откуда такие пробелы в тексте.
точный ответ зависит от контекста. В общем случае эти символы не должны присутствовать (HTML 5.2 §3.2.4.2.5):
текстовые узлы и значения атрибутов должны состоять из символов Юникода, не должны содержать U+0000 символов, не должны содержать постоянно неопределенные символы Юникода (нехарактеристики) и не должны содержать управляющих символов, отличных от пробелов. Эта спецификация включает дополнительные ограничения на точное значение текстовых узлов и значения атрибутов в зависимости от их точного контекста.
для элементов в HTML ограничения модели текстового содержимого также зависят от типа элемента. Например, "
эти ограничения разбросаны по спецификации. Например, значения атрибутов (§8.1.2.3) не должно содержать неоднозначное амперсанд и (i) пустыми, (ii) в одинарных кавычках (и поэтому не должны содержать U+0027 Апостроф
'
),(iii) в двойных кавычках (не должен содержать символ кавычки U+0022"
), или (iv) без кавычек - со следующими ограничениями:... не должно содержать буквенных пробелов, кавычек U+0022 ( " ), Апостроф U + 0027 ('), U+003D равно знаковым символам ( = ), U+003C меньше знаковых символов ( ) или U+0060 символов серьезного ударения ( ` ) и не должно быть пустой строкой.