Разрешить полный HTML для анализа в HTMLPurifier
Это проблема, с которой я столкнулся в течение долгого времени - в настоящее время я принимаю полную html-страницу от пользователя в качестве ввода и хочу отфильтровать / очистить ее. проблема с HTMLpurifier заключается в том, что он удаляет теги head, html и body, а также стили в заголовке. Я погуглил, посмотрел форумы, попытался реализовать написанное, и не повезло. Может кто-нибудь помочь?
Что я хочу: сохранить HTML, заголовок, стиль, теги тела
Что я сделал:
$config->set('HTML.DefinitionID', 'test');
$config->set('HTML.DefinitionRev', 1);
$config->set('HTML.AllowedElements', array('html','head', 'body', 'style', 'div', 'p'));
if ($def = $config->maybeGetRawHTMLDefinition()) {
$def->addElement('html', 'Block', 'Inline', 'Common', array());
$def->addElement('head', 'Block', 'Inline', 'Common', array());
$def->addElement('style', 'Block', 'Inline', 'Common', array());
$def->addElement('body', 'Block', 'Inline', 'Common', array());
}
3 ответа
Конечный результат - HTMLPurfier изначально не разрешает полный синтаксический анализ HTML - либо расширьте его, либо найдите проход
Вам нужно
$config->set('Core.ConvertDocumentToFragment', false);
Для любой причины, Core.ConvertDocumentToFragment
по умолчанию true
, хотя в документации говорится, что "для большинства входных данных эта обработка не является необходимой".
Меня это тоже укусило. Все, что я получил от сборщика ошибок, - это загадочное сообщение "Удаленные теги метаданных документа", которое, в свою очередь, является переводом внутреннего сообщения "Lexer: Извлеченное тело".
Почему бы не использовать strip_tags? Поддерживает список разрешенных тегов.