如何在HTML Purifier中删除img标签的alt属性?

时间:2017-10-06 17:53:30

标签: htmlpurifier

默认情况下,HTML Purifier会为每个alt标记添加img属性(非常烦人的行为)。所以

<img src="123.jpg" />

变为

<img src="123.jpg" alt="123.jpg" />

文档提到Attr.DefaultImageAlt选项。它默认为NULL意味着使用src的{​​{1}}属性的基名。当我将alt设置为空字符串时,结果变为

Attr.DefaultImageAlt

任何人都可以建议如何完全摆脱<img src="123.jpg" alt="" /> 属性?

1 个答案:

答案 0 :(得分:1)

您所观察到的是,根据标准,alt标记必须包含img属性,HTML Purifier会将标准考虑在内。

这意味着HTML Purifier,除非你调整其基本的HTML处理行为(无论是通过修补HTML Purifier,还是通过重写对某些标记或属性的理解),都不能放弃alt=属性。

(浏览器实际上有类似的行为,但可能不那么明显 - 如果您删除alt=,它们仍将具有他们使用的内部alt=值。)

如果此信息不会改变您对如何处理属性的看法,请继续阅读:

修补

(即更改行为 更改HTML Purifier源代码。)

如果要修补HTML Purifier以允许alt不存在,则应修补 library / HTMLPurifier / AttrTransform / ImgRequired.php 。您还可以看到如何在那里使用Attr.DefaultImageAlt指令 - 如果您提供值null(而不是空字符串),则文件名的一部分将用作alt

重写

(即更改行为,不用更改HTML Purifier源代码。)

如果要覆盖HTML Purifier行为,请查看HTML Purifier站点上的Customize!文档。

如果没有对其进行测试,我相信您需要进行两项更改才能覆盖您看到的行为:

1)使alt成为非强制性的:

$htmlDef = $this->configuration->getHTMLDefinition(true);
$htmlDef->addAttribute('img', 'alt', new HTMLPurifier_AttrDef_Text());

缺少*应该会帮助你。

2)删除或替换ImgRequired属性转换。

您可以看到HTMLPurifier_AttrTransform_ImgRequired类最终在 library / HTMLPurifier / HTMLModule / Image.php 中注册了$htmlDef->info_attr_transform_post['img']$htmlDef->info_attr_transform_pre['img']。你能够做到这样的事情:

$htmlDef->info_attr_transform_pre['img'] = array();
$htmlDef->info_attr_transform_post['img'] = array();

// You can *replace* the old behaviour with your own by writing
// your own class and loading it here:
// $htmlDef->info_attr_transform_pre['img'][] = new YourOwnClass();
// $htmlDef->info_attr_transform_post['img'][] = new YourOwnClass();

在实现这一目标的过程中可能会遇到一些障碍(例如,该课程可能会在我刚才所说的某个地方进行微妙的注册 - 自从我在这个级别上修改HTML Purifier以来已经过了几年!) ,但这应该让你在HTML Purifier代码上弄脏自己。 :)