默认情况下,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="" />
属性?
答案 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代码上弄脏自己。 :)