我在 PHP 中使用 HTML Tidy,它产生了意外的结果,因为<script>
JavaScript 字符串文字中的标签。这是一个示例输入:
<html>
<script>
var t='<script><'+'/script>';
</script>
</html>
HTML Tidy 的输出:
<html>
<script>
//<![CDATA[
var t='<script><'+'/script>';
<\/script>
<\/html>
//]]>
</script>
</html>
是口译</script></html>
作为脚本的一部分。然后,它添加了另一个</script></html>
关闭打开的标签。我在 HTML Tidy 的在线版本上尝试过这个(http://www.dirtymarkup.com/ http://www.dirtymarkup.com/)并且它产生相同的错误。
如何防止 PHP 中发生此错误?
玩了一下之后我发现可以使用评论//'<\/script>'
以某种方式混淆算法以防止此错误发生:
<html>
<script>
var t='<script><'+'/script>'; //'<\/script>'
</script>
</html>
清理后:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<script>
var t='<script><'+'/script>'; //'<\/script>'
</script>
<title></title>
</head>
<body>
</body>
</html>
我的猜测是,当清理算法查看代码并检测字符串时<script>
两次,它寻找</script>
立即地。并分离<
with /script>
做第二个</script>
未被发现,这就是为什么它决定添加另一个</script>
在代码的末尾,并以某种方式用另一个关闭它</html>
。 (确实是糟糕的设计!)
所以我做了第二个假设,即算法中没有 if 语句来确定是否</scirpt>
在评论中,我是对的!有另一个字符串<\/script>
作为 javascript 注释确实使算法认为有两个</script>
总共。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)