像这样使用 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;
}