目前我的htmlpurifier并不允许自动'图像标记上的高度和宽度属性的值,但仅限于数值。
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.SafeIframe', true);
$config->set('URI.SafeIframeRegexp', '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/)%'); //allow YouTube and Vimeo
$purifier = new HTMLPurifier($config);
我如何继续允许自动值?
答案 0 :(得分:1)
虽然CSS属性width
和height
支持auto
值,但HTML属性width
和height
执行不支持auto
。请参阅"Objects, Images, and Applets in HTML documents" > "Width and height"以及"Length"的定义。
HTML Purifier的一个功能是强制您提供的HTML符合标准。简而言之,这会降低在浏览器中利用未定义行为的能力,从而提高安全性。
但是,在这种情况下,默认情况下HTML Purifier实际上甚至更严格并且不允许百分比。这与auto
问题无关 - 但值得注意的是,您必须将HTML.MaxImgLength
设置为null
才能启用百分比。这表明你应该考虑一下你是否真的想要这个。
最简单的不提供 auto
和width
属性,可以最好地模拟您想要的行为(height
)。
尽管如此,您仍然可以告诉HTML Purifier以不同的方式处理这种情况:
(即更改行为 更改HTML Purifier源代码。)
在这种情况下,修补代码并不比覆盖代码容易得多,因此我不推荐使用它,但了解如何修补HTML Purifier可以帮助您理解为什么覆盖它有效:
如果要修补HTML Purifier以允许width
和height
支持auto
值,则应修补 library / HTMLPurifier / HTMLModule / Image.php 。目前的限制在以下几行:
// According to the spec, it's Length, but percents can
// be abused, so we allow only Pixels.
'height' => 'Pixels#' . $max,
'width' => 'Pixels#' . $max,
您需要向Pixels
指的是 library / HTMLPurifier / AttrDef / HTML / Pixels.php 中的类HTMLPurifier_AttrDef_HTML_Pixels
。我建议使用Pixels
或Length
作为支持值auto
的类的模板。
(即更改行为,不用更改HTML Purifier源代码。)
如果要覆盖HTML Purifier行为,请查看HTML Purifier站点上的Customize!文档。
从表面上看,覆盖行为看起来很像修补过程:
您仍然应该编写一个类似 library / HTMLPurifier / AttrDef / HTML / Pixels.php 或 library / HTMLPurifier / AttrDef / HTML / Length.php ,但把它放在HTMLPurifier代码库之外的某个地方。
拥有该类后,您可以使用以下配置代码覆盖默认的width
和height
行为:
$htmlDef = $this->configuration->getHTMLDefinition(true);
$htmlDef->addAttribute('img', 'width', new YourOwnClass());
$htmlDef->addAttribute('img', 'height', new YourOwnClass());
在实现这一目标的过程中可能存在一些障碍(自从我在这个级别上修改了HTML Purifier以来已经过了几年了!),但是这应该会让你走上一条通往HTML的好方法净化器代码。 :)