使用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;
}
答案 0 :(得分:1)
您需要将lowercase_s
CSSTidy配置选项设置为false
。否则,它将小写所有选择器以包含在XHTML中。
答案 1 :(得分:1)
实际上,这是一个HTML Purifier错误,而不是CSS Tidy错误。我正在努力修复。
请申请此补丁:http://repo.or.cz/w/htmlpurifier.git/commit/f38fca32a9bad0952df221f8664ee2ab13978504(只有库中的文件补丁/确实是必需的)