1

像这样使用 PHP/Codeigniter/HTMLPurifier/CSStidy:

require_once 'extra/htmlpurifier-4_4_0/library/HTMLPurifier.auto.php';
require_once 'extra/csstidy-1_3/class.csstidy.php';

$input_css = $this->input->post('input_css');

$config = HTMLPurifier_Config::createDefault();
$config->set('Filter.ExtractStyleBlocks', TRUE);

// Create a new purifier instance
$purifier = new HTMLPurifier($config);

// Wrap our CSS in style tags and pass to purifier. 
// we're not actually interested in the html response though
$html = $purifier->purify('<style>'.$input_css.'</style>');

// The "style" blocks are stored seperately
$output_css = $purifier->context->get('StyleBlocks');

// Get the first style block
$unClean_css = $input_css;
$clean_css = $output_css[0];

...有没有办法关闭 HTMLPurifier 或 CSStidy 中导致$clean_css强制转换为小写的任何内容?就大小写而言,我需要单独留下输出。我只是不使用 CSStidy,但它在安全性和压缩等方面工作得很好。只是考虑到区分大小写,它还占用了一些(例如背景图像)文件路径。我无法从头开始解决问题(即我不能只强制全部小写)......所以我按照我的方式提出问题。也许是配置设置?(我希望)......我一直在寻找,但还没有看到一个能做到这一点的人。

更新:正如 nickb 指出的那样,CSStidy 中有一个配置选项可以控制这一点,所以问题就变成了:如何在 HTMLpurifier 的上下文中将该选项设置为 FALSE?

还是那个lowercase_sCSSTidy 配置选项甚至是罪魁祸首?我不知道,因为到目前为止我无法以一种或另一种方式停止小写。例如,我想要这样的输入:

.zzzzzz {
    background:transparent url("images/tmpl_Btn1_CSSdemo.jpg") no-repeat right top;
}

...不会变成(就像现在一样):

.zzzzzz {
    background:transparent url("images/tmpl_btn1_cssdemo.jpg") no-repeat right top;
}
4

2 回答 2

1

您需要将lowercase_sCSSTidy 配置选项设置为false. 否则,它将小写所有选择器以包含在 XHTML 中。

于 2012-06-01T02:29:11.237 回答
1

实际上,这是一个 HTML Purifier 错误,而不是 CSS Tidy 错误。我正在修复。

请应用此补丁:http ://repo.or.cz/w/htmlpurifier.git/commit/f38fca32a9bad0952df221f8664ee2ab13978504 (只有在库/文件中的补丁才是真正需要的)

于 2012-06-02T15:18:49.213 回答