escaping внутри значения атрибута тега html

У меня возникли проблемы с пониманием того, как escaping работает внутри значений атрибутов тега html, которые являются javascript.

Мне повезло, что вы всегда должны избегать & “. Поэтому для javascript как значения атрибута я попытался:

 

Это не работает. Однако:

  

а также

  

работает во всех браузерах!

Теперь я совершенно смущен. Если все мои значения атрибутов заключены в двойные кавычки, значит ли это, что мне не нужно избегать одиночных кавычек? Или это просто и технически разные персонажи? Для того чтобы javascript требовал ascii 39, но не apos?

Здесь задействованы два типа «экранов», HTML и JavaScript. При интерпретации HTML-документа сначала просматриваются экраны HTML.

Что касается HTML, то правила внутри значения атрибута такие же, как и в других местах, плюс одно дополнительное правило:

  • Следует избегать символа меньше < . Обычно < используется для этого. Технически, в зависимости от версии HTML, экранирование не всегда требуется, но оно всегда было хорошей практикой.
  • Амперсанд должен быть экранирован. Обычно & используется для этого. Это тоже не всегда обязательно, но проще делать это всегда, чем учиться и помнить, когда это требуется.
  • Символ, который используется как разделители вокруг значения атрибута, должен быть экранирован внутри него. Если вы используете кавычку Ascii " как разделитель», обычно можно избежать ее появления с использованием » " тогда как для апострофа Ascii ссылка на сущность« определена »только в некоторых версиях HTML, поэтому безопаснее использовать числовую ссылку ' (или ' ).

Вы можете избежать > (или любого другого символа данных), если хотите, но это никогда не понадобится.

На стороне JavaScript есть некоторые механизмы эвакуации (с \ ) в строковых литералах. Но это другая проблема, и это не относится к вашему делу.

В вашем примере в браузере, соответствующем текущим спецификациям, интерпретатор JavaScript видит точно такое же alert('Hello'); кода alert('Hello'); , Браузер имеет «незастроенный» или к ' . Я был несколько удивлен здесь, в наши дни не поддерживается повсеместно, но это не проблема: редко нужно избегать апострофа Ascii в HTML (экранирование требуется только в значениях атрибута, и только если вы используете апостроф Ascii в качестве его разделителя), и когда есть , вы можете использовать ' Справка.

' не является допустимым объектом ссылки HTML . Вам следует избегать использования '

Вы правы, что вам не нужно избегать одиночных кавычек, если ваш тег заключен в двойные кавычки. Когда я делаю код javascript в тегах (что редко встречается с jQuery), единственным символом, который я убегаю, является двойная цитата, браузеры отлично справляются с остальными.