我正在使用基于Python的HTML解析器并解析Stackoverflow。解析器用
打开了一行HTMLParser.HTMLParseError: bad end tag: "</'+'scr'+'ipt>", at line 649, column 29
错误指向网站源代码中的以下javascript行:
<script type="text/javascript">
document.write('<s'+'cript lang' + 'uage="jav' + 'ascript" src=" [...] ">');
document.write('</'+'scr'+'ipt>');
</script>
([...]替换长链接,为简单起见,将其删除)
出于好奇,是否有一个特定的原因让我看起来像代码的人工“混淆”,即为什么使用document.write方法来连接所有切碎的字符串?
答案 0 :(得分:7)
我认为这是为了打击广告拦截器。
... + 'uage="jav' + 'ascript" src="http://ads.stackoverflow.com
答案 1 :(得分:2)
它是以这种方式编写的,以避免浏览器认为它是<script>
的结束标记,这会导致一些问题。
答案 2 :(得分:1)
当HTML解析器遇到document.write('</script>');
时,它认为它已找到封闭的<script>
标记的末尾。打破标记可以阻止解析器识别结束标记。
我见过的另一种方法是逃避斜线,即document.write('<\/script>');
。
正确的方法是:
<![CDATA[ ... ]]>
块中(如果提供XHTML)或答案 3 :(得分:-1)
也许它可以阻止专门搜索脚本标签的程序。例如,广告拦截器会查找脚本标记和对象标记。