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

How to remove alt attribute of img tag in HTML Purifier?

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

<img src="123.jpg" />

变成

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

文档提到了一个 Attr.DefaultImageAlt 选项。它默认为 NULL,表示将 src 属性的基本名称用于 alt。当我将 Attr.DefaultImageAlt 设置为空字符串时,结果变为

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

任何人都可以建议如何完全摆脱 alt 属性?

您观察到的是因为根据标准,alt 属性对于 img 标签是强制性的,而 HTML Purifier 将标准考虑在内。

这意味着 HTML 净化器,除非你调整它的基本 HTML 处理行为(通过修补 HTML 净化器,或者覆盖它对某些标签或属性的理解),不能离开 alt= 属性。

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

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

正在修补

(即通过 更改 HTML 净化器源代码来更改行为 。)

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

覆盖

(即改变行为 而不 改变 HTML Purifier 源代码。)

如果您想覆盖 HTML 净化器行为,请查看 HTML 净化器网站上的 Customize! 文档。

在没有测试的情况下,我认为您需要进行两项更改以覆盖您看到的行为:

1) 制作 alt non-mandatory:

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

缺少 * 应该可以帮助你。

2) 删除或替换 ImgRequired attribute-transformation.

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

$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();

在实现此功能的过程中可能会遇到一些障碍(例如,class 可能会在与我刚才所说的略有不同的地方注册 - 自从我修补 HTML 这个级别的 Purifier!),但这应该让您走上一条良好的道路,让您亲自动手 HTML Purifier 代码。 :)