Я использую заголовок атрибута html, чтобы установить некоторые подсказки, подобные этому:
<a href... title="Go to next chapter">Go</a>
Затем плагин jquery просматривает все атрибуты [title] и создает красивые подсказки. Очень упрощенный новый div создан по ссылке выше
<div style="position:absolute...">Go to next chapter</div>
Проблема в том, что заголовок редактируется пользователем, поэтому он может писать все, что захочет. Сначала я подумал, что html-кодирование в порядке, но оказалось, что я ошибался.
Если у меня есть
<a id="a" title="<script>alert(10);</script>">Go</a>
тогда подсказка div выглядит следующим образом:
<div style="position:absolute..."><script>alert(10)</script></div>
1) Почему браузер декодирует атрибут title при запросе его значения?
2) И как я могу это решить? (Я знаю, что одним из решений является двойная HTML-кодировка, но это здорово)
Как это проверить: рассмотрите этот код
<html>
<body>
<!-- encoding once, this doesn't work -->
<a id="a" title="<script>alert(10);</script>">atitle</a>
<!-- encoding twice, this works -->
<a id="b" title="&lt;script&gt;alert(10);&lt;/script&gt">btitle</a>
<script>
function w(x){ document.write(x.attributes["title"].value);}
w(a); // shows alert
w(b); // outputs it correctly into the page
</script>
</body>
</html>