Как удалить атрибут 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.:)