Существует два типа «побегов»: HTML и JavaScript.При интерпретации HTML-документа экранированные коды HTML сначала анализируются.
Что касается HTML, то правила в значении атрибута такие же, как и в других местах, плюс одно дополнительное правило:
- Символ менее 100 * * должен быть экранированОбычно
<
используется для этого.Технически, в зависимости от версии HTML, экранирование не всегда требуется, но это всегда было хорошей практикой. - Амперсанд
&
должен быть экранирован.Обычно для этого используется &
.Это тоже не всегда обязательно, но проще делать это всегда, чем учиться и запоминать, когда это необходимо. - Символ, который используется в качестве разделителей вокруг значения атрибута, должен быть экранирован внутри него.Если вы используете кавычку Ascii
"
в качестве разделителя, то обычно избегаете его вхождений, используя "
, тогда как для апострофа Ascii ссылка на сущность '
определена только в некоторых версиях HTML, поэтому ее безопаснее всего использоватьчисловая ссылка '
(или '
).
Вы можете экранировать >
(или любой другой символ данных), если хотите, но это никогда не требуется.
На стороне JavaScript в строковых литералах есть несколько escape-механизмов (с \
).Но это другая проблема, которая не относится к вашему случаю.
В вашем примере в браузере, соответствующем текущим спецификациям, интерпретатор JavaScript видит точно такой же код alert('Hello');
.Браузер имеет «unescaped» '
или '
до '
.Я был несколько удивлен, что '
не поддерживается повсеместно в наши дни, но это не проблема: редко возникает необходимость избежать апострофа Ascii в HTML (экранирование необходимо только в значениях атрибутов и только если вы используете Asciiапостроф как его разделитель), и когда он есть, вы можете использовать '
ссылку.