8

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

非常感谢!

4

3 回答 3

8

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

于 2013-03-12T18:08:36.770 回答
1

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

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

于 2013-03-12T17:25:37.733 回答
0

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

<link rel="stylesheet" type="text/css" media="screen, print" href="site.css">
于 2013-03-12T15:38:13.553 回答