Я просто столкнулся с патологическим случаем с разбором HTML. Я всегда думал, что тег <script>
будет работать до первого закрывающего тега </script>
. Но оказывается, что это не всегда так.
Это действительно:
<script><!--
alert('<script></script>');
--></script>
И даже это действительно:
<script><!--
alert('<script></script>');
</script>
Но это не так:
<script><!--
alert('</script>');
--></script>
И это не так:
<script>
alert('<script></script>');
</script>
Такое поведение согласуется с Firefox и Chrome. Таким образом, как трудно полагать, браузеры, похоже, принимают тег open + close script внутри комментария html внутри тега script. Итак, вопрос в том, как браузер действительно анализирует теги script? Это имеет значение, потому что библиотека разбора HTML, которую я использую, Nokogiri, принимала очевидное (но неправильное) правило до первого закрытия и не обрабатывала этот край. Я полагаю, что большинство других библиотек тоже не справятся.