如何在 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 代码。 :)
默认情况下,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 代码。 :)