有没有办法阻止HTMLPurifier / CSStidy强制输入CSS为全小写?

时间:2012-06-01 02:15:10

标签: php codeigniter case-insensitive htmlpurifier csstidy

使用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_s CSSTidy配置选项甚至是罪魁祸首?我不知道,因为我到目前为止无法以这种或那种方式阻止小套管。我希望例如输入如此:

.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;
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

请申请此补丁:http://repo.or.cz/w/htmlpurifier.git/commit/f38fca32a9bad0952df221f8664ee2ab13978504(只有库中的文件补丁/确实是必需的)