我在 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/) 的在线版本上试过这个,它产生了同样的错误。
如何防止在 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>
立即地。和分离<
与 /script>
使第二个</script>
未被发现,这就是为什么它决定添加另一个 </script>
在代码的末尾,不知何故也用 antoher </html>
关闭了它. (确实是糟糕的设计!)
所以我做了第二个假设,即算法中没有 if 语句来确定 </scirpt>
是否存在。在评论中,我是对的!有另一个字符串 <\/script>
作为 javascript 注释确实使算法认为有两个 </script>
总计。
关于javascript - HTML Tidy 在 JavaScript 字符串文字中的脚本标记上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22029242/