Как удалить атрибут alt тега img в HTML Purifier?

По умолчанию HTML Purifier добавляет alt приписать каждому img тег (действительно раздражающее поведение). Так

<img src="123.jpg" />

становится

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

В документации упоминается опция Attr.DefaultImageAlt. По умолчанию NULL означает использование базового имени src атрибут для alt, Когда я установил Attr.DefaultImageAlt в пустую строку результат становится

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

Любой может подсказать, как избавиться от alt приписать полностью?

1 ответ

Решение

То, что вы наблюдаете, проистекает из этого alt атрибут обязателен для img теги в соответствии со стандартами, а HTML Purifier учитывает стандарты.

Это означает, что HTML Purifier, если вы не настроите его основное поведение при обработке HTML (будь то путем исправления HTML Purifier или переопределением его понимания определенных тегов или атрибутов), не может быть оставлен без внимания. alt= приписывать.

(Браузеры на самом деле имеют похожее поведение, хотя это может быть не так очевидно - если вы удалите alt=у них все равно будет внутренний alt= значение, которое они используют вместо этого.)

Если эта информация не меняет ваше мнение о том, как обращаться с атрибутом, читайте дальше:

Заделка

(т.е. изменение поведения путем изменения исходного кода очистителя HTML.)

Если вы хотите пропатчить очиститель HTML, чтобы разрешить alt чтобы отсутствовать, вы должны исправить библиотеку / HTMLPurifier / AttrTransform / ImgRequired.php. Вы также можете увидеть, как Attr.DefaultImageAlt Директива используется там - если вы предоставите значение null (а не пустая строка), часть имени файла будет использоваться как alt значение.

Переопределение

(т.е. изменение поведения без изменения исходного кода очистителя HTML.)

Если вы хотите переопределить поведение HTML-очистителя, ознакомьтесь с настройкой! документация на сайте HTML Purifier.

Не проверяя его, я считаю, что вам нужно внести два изменения, чтобы переопределить поведение, которое вы видите:

1) сделать alt необязательный:

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

Отсутствие * должен помочь вам там.

2) Снимите или замените ImgRequired атрибут-преобразование.

Вы можете видеть, что HTMLPurifier_AttrTransform_ImgRequired класс заканчивается регистрацией в обоих $htmlDef->info_attr_transform_post['img'] а также $htmlDef->info_attr_transform_pre['img'] в библиотеке / HTMLPurifier / HTMLModule / Image.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();

Могут быть некоторые препятствия на пути к тому, чтобы заставить это работать (например, класс может быть зарегистрирован где-то немного отличным от того, что я только что сказал - это было несколько лет назад, когда я возился с HTML Purifier на этом уровне!), Но это должен дать вам хороший путь к тому, чтобы испачкать руки на коде HTML Purifier.:)

Другие вопросы по тегам