我使用php tidy来清理用户生成的HTML页面,其中包含一个样式标签:
<style type="text/css">
body {
padding-top: 60px;
padding-bottom: 40px;
}
</style>
但是一旦我运行Tidy,样式标记数据就被转换为CData。我使用Tidy的主要目的是修复文件以及做适当的缩进。
<style type="text/css">
/*<![CDATA[*/
body {
padding-top: 60px;
padding-bottom: 40px;
}
/*]]>*/
</style>
我的Tidy配置选项是-
$options = array(
'preserve-entities' => true,
'hide-comments' => true,
'tidy-mark' => false,
'indent' => true,
'indent-spaces' => 4,
'new-blocklevel-tags' => 'article,header,footer,section,nav',
'new-inline-tags' => 'video,audio,canvas,ruby,rt,rp',
'doctype' => 'omit',
'sort-attributes' => 'alpha',
'vertical-space' => false,
'output-xhtml' => true,
'wrap' => 180,
'wrap-attributes' => false,
'break-before-br' => false,
'vertical-space' => false,
);
$buffer = tidy_parse_string($buffer, $options, 'utf8');
tidy_clean_repair($buffer);
我试着搜索了很多,但是PHP Tidy库并不是一个"文档齐全"的库!所以它归结为在Tidy清理/修复代码后手动删除CDATA。
$buffer = str_replace("/*<![CDATA[*/","",$buffer);
$buffer = str_replace("/*]]>*/","",$buffer);
现在我使用这种方法的问题是样式标签数据的缩进仍然搞砸了(没有与页面的其余部分完全对齐)
<style type="text/css">
body {
padding-top: 60px;
padding-bottom: 40px;
}
</style>
那么,我如何防止TIDY在页面上创建CDATA呢?非常感谢!
关闭output-xhtml
选项。XHTML需要CDATA包装,因为CSS可以包含未转义的>
字符。
添加CDATA标签是为了帮助浏览器知道它们应该将'<'和'&'等字符解析为文字字符而不是html语法。Tidy似乎没有任何文档化的配置来阻止为内联css/javascript生成它们。唯一的选择是将css移到单独的文件中。在这种情况下,它不需要CDATA标签。
详情请参阅http://tidy.sourceforge.net/docs/quickref.html和https://en.wikipedia.org/wiki/CDATA
一种处理方法是使用外部样式表的链接。
<link rel="stylesheet" type="text/css" media="screen, print" href="site.css">