我正在使用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>
我的整洁配置选项是 -
$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!
非常感谢!
答案 0 :(得分:8)
关闭output-xhtml
选项。 XHTML需要CDATA包装,因为CSS可以包含未转义的>
个字符。
答案 1 :(得分:1)
添加CDATA标签旨在帮助浏览器知道他们应该解析像'&lt;'这样的字符和'&amp;'作为文字字符而不是html语法。 Tidy似乎没有任何记录的配置会阻止为内联css / javascript生成它们。唯一的选择是将css移动到单独的文件中。在这种情况下,它不需要CDATA标签。
有关详细信息,请参阅http://tidy.sourceforge.net/docs/quickref.html和https://en.wikipedia.org/wiki/CDATA。
答案 2 :(得分:0)
处理它的一种方法是使用外部样式表的链接。
<link rel="stylesheet" type="text/css" media="screen, print" href="site.css">