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


Prevent PHP Tidy from converting style tag data to CDATA

我使用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">