我的用户可以使用的文本框编辑器为他们提供了一系列很好的选项,使他们的描述看起来很独特。其中一个选项是缩进段落的能力,这是以下HTML:
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"></blockquote>
现在,在HTMLPurifier中,您可以允许属性/某些HTML,例如:
$config->set('HTML.Allowed', 'blockquote[style],a[href]');
样式和href当然是允许的属性。虽然,允许它们的style属性可能会导致一些问题。那么有什么方法可以限制它只允许style属性,如果它设置为
margin: 0 0 0 40px; border: none; padding: 0px;
修改
这是一个很好的答案:https://stackoverflow.com/a/6231024/2574433
但是,你能否进一步限制它以支持这样的事情:
$config->set('CSS.AllowedProperties', 'margin: 0 0 0 40px;');
答案 0 :(得分:1)
不,如果不自己修补图书馆,这种特殊性是不可能的。
如果您可以控制输入HTML,您可以做的一件事是禁用内联样式,并将这些“预设”样式作为可用于代码的类提供。
如果您希望修补HTML Purifier具有更高的特异性,您将需要查看AttrDef类,它们指定如何验证像margin这样的属性;你可以在HTMLPurifier_CSSDefinition中看到对应关系。
答案 1 :(得分:0)
K,所以我不得不以这种方式进入野兽模式,并随机整理文档。这是一个示例,如果您想在CSS.AllowedProperties区域中启用弹性框CSS(甚至不必进行配置)。
$config = HTMLPurifier_Config::createDefault();
$config->set('CSS.AllowImportant', true);
$config->set('CSS.AllowTricky', true);
$config->set('CSS.Proprietary', true);
$config->set('CSS.Trusted', true);
$css_definition = $config->getDefinition('CSS');
// redefine this to add the flex attribute
$css_definition->info['display'] = new HTMLPurifier_AttrDef_Enum(
[
'inline',
'block',
'list-item',
'run-in',
'compact',
'marker',
'table',
'inline-block',
'inline-table',
'table-row-group',
'table-header-group',
'table-footer-group',
'table-row',
'table-column-group',
'table-column',
'table-cell',
'table-caption',
'none',
'flex'
]
);
$css_definition->info['flex-direction'] = new HTMLPurifier_AttrDef_Enum(
[
'column',
'column-reverse',
'row',
'row-reverse'
]
);
$css_definition->info['flex-wrap'] = new HTMLPurifier_AttrDef_Enum(
[
'wrap',
'nowrap',
'wrap-reverse'
]
);
$css_definition->info['justify-content'] = new HTMLPurifier_AttrDef_Enum(
[
'center',
'flex-start',
'flex-end',
'space-around',
'space-between'
]
);
$css_definition->info['align-items'] = new HTMLPurifier_AttrDef_Enum(
[
'center',
'flex-start',
'flex-end',
'stretch',
'baseline'
]
);
$css_definition->info['align-content'] = new HTMLPurifier_AttrDef_Enum(
[
'space-between',
'space-around',
'stretch',
'center',
'flex-start',
'flex-end'
]
);
$css_definition->info['flex-basis'] = new HTMLPurifier_AttrDef_CSS_Percentage();
$purifier = new HTMLPurifier($config);