防止PHP Tidy将样式标记数据转换为CDATA

时间:2013-03-12 15:36:02

标签: php html5 tidy

我正在使用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!

非常感谢!

3 个答案:

答案 0 :(得分:8)

关闭output-xhtml选项。 XHTML需要CDATA包装,因为CSS可以包含未转义的>个字符。

答案 1 :(得分:1)

添加CDATA标签旨在帮助浏览器知道他们应该解析像'&lt;'这样的字符和'&amp;'作为文字字符而不是html语法。 Tidy似乎没有任何记录的配置会阻止为内联css / javascript生成它们。唯一的选择是将css移动到单独的文件中。在这种情况下,它不需要CDATA标签。

有关详细信息,请参阅http://tidy.sourceforge.net/docs/quickref.htmlhttps://en.wikipedia.org/wiki/CDATA

答案 2 :(得分:0)

处理它的一种方法是使用外部样式表的链接。

<link rel="stylesheet" type="text/css" media="screen, print" href="site.css">