javascript - HTML Tidy 在 JavaScript 字符串文字中的脚本标记上失败

标签 javascript php html

我在 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/

相关文章:

html - 如何在 Firefox(Firefox 版本 30)和 IE 中删除默认箭头形式 <select>

尽管删除了 getter,Javascript 还是不允许我设置只有 getter 的属性

javascript - 动态下拉列表 - 想要一种将输入存储在变量中的方法

php - 使用 PHP 发送一封电子邮件,其中包含从数据库中获取的信息

javascript - 向特定用户发送浏览器通知(网络)

php清理输出表单数组

javascript - 如何将一个元素精确地放置在另一个元素上?

jquery - 谷歌浏览器不显示箭头标志

javascript - 如何在 JS 中使用 CSS

javascript - 如何进行多个 api 调用以在 d3 图表中显示单个数据