Экранирование обратной косой черты не работает в атрибутах HTML - PullRequest
0 голосов
/ 04 мая 2018

Я попробовал приведенный ниже код для проверки того, что обратный слеш в значении атрибута HTML делает символ рядом с ним экранированным:

<button id="b1" onclick="$('body').append('<button onclick=alert(\'something\');>')">test</button>

Здесь, если обратная косая черта работает, тогда, когда мы нажимаем на # b1, должна добавляться новая кнопка, а когда мы нажимаем на эту новую кнопку, должно появляться новое предупреждение. Но это не так. Это означает, что обратная косая черта не будет работать в атрибутах HTML. Это правильно? Тогда как мне избежать вещей?

Когда я попытался открыть эту веб-страницу с view-source: prefix, я увидел код, как показано ниже:

<!DOCTYPE html>
<html lang="en">
 <head>
  <title>
   Hi there!
  </title>
  <meta name="viewport" content="width=device-width">
  <script src="jQuery.js"></script>
  <style>
    .red{color: red;} 
  </style>
 </head>
 <body>
  <button id="b1" onclick="$('body').append('<button onclick=alert(+AFw'something+AFw');>test</button>')">
    test
  </button>
  <script src="question.js"></script>
 </body>
</html>

Здесь обратные слеши заменяются на + AFW . Это неправильно ? Кроме того, если я попытаюсь изменить значение атрибута onclick на doIt(); и добавить приведенный ниже код в файл question.js, он будет отлично работать:

function doIt(){
    alert("<button onclick=\"alert('hi');\"> ");
}

Но, как следует из вопроса, мы должны выяснить, почему экранирование обратной косой черты не работает в значениях атрибутов HTML. Также я хочу определить, что произойдет при нажатии кнопки, прямо в атрибуте.

Заранее благодарим за предоставление информации .....

1 Ответ

0 голосов
/ 04 мая 2018

Кажется, работает. Вот исполняемый скрипт / пример

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="b1" onclick="$('body').append('<button onclick=alert(\'something\');>test</button>')">test</button>
...