2013-06-20 2 views
2

HTMLPurifier по умолчанию разрешает множество тегов, которые я не хочу разрешать. Согласно документации, вы должны добавить определения, как это:Получить HTMLPurifier 4.5, чтобы разрешить только один тег

$config = HTMLPurifier_Config::createDefault(); 
if ($def = $config->maybeGetRawHTMLDefinition()) { 
    $def->addAttribute('a', 'target', new HTMLPurifier_AttrDef_Enum(array('_blank','_self','_target','_top'))); 
} 
$purifier = new HTMLPurifier($config); 

Проблема заключается в том, что я не могу найти способ, чтобы удалить все теги, исходящим из HTMLPurifier_Config::createDefault();.

Например, HTML <div>Sometext</div> сохранит тег DIV, используя вышеуказанный код инициализации.

Как установить HTMLPurifier только для <strong>, <a href="*"> и <p>?

+0

Я чувствую, что HTMLPurifier, возможно, стал чуть более структурой, построенными. – frodeborli

ответ

3

Вы говорите: «В соответствии с документацией вы должны добавить такие определения как».

Если только что-то фундаментальное не изменилось с тех пор, как я проверил библиотеку (год назад, примерно), это не совсем так - эта часть существует, если вы хотите научить HTML-очиститель новым атрибутам, которые не являются изначально осведомленный. Например, если вы хотите научить свой HTML-очиститель принимать нестандартные атрибуты <font>, например align="", вам нужно изменить исходное определение HTML.

Однако, если ваш белый список состоит исключительно из обычных HTML-элементов (! И ваш делает), вам просто нужно использовать $config объект:

$config = HTMLPurifier_Config::createDefault(); 
$config->set('HTML.AllowedElements', array(
    'strong','a','p' 
)); 
$config->set('HTML.AllowedAttributes', array(
    'a.href' 
)); 
$purifier = new HTMLPurifier($config); 

Это должно работать. Вы сталкиваетесь с проблемами с этим созвездием?

(Проверьте этот документ тоже: http://htmlpurifier.org/live/INSTALL)

+0

Спасибо. Я сделал это так же, как раньше, но я подумал, что самая последняя версия сильно изменила их API. – frodeborli

-1

Решение, которое я нашел, это использовать старый способ настройки HTMLPurifier;

if($def = $config->maybeGetRawHTMLDefinition()) { 
    $config->set('HTML.AllowedElements', array(
     'strong','a','p' 
    )); 
    $config->set('HTML.AllowedAttributes', array(
     'a.href' 
    )); 
} 

Как это работает в связи с HTMLDefinition, которого я не знаю. Возможно, у них есть уровень совместимости.

Самая большая проблема, которую я испытываю, заключается в том, что она не использует возвращаемую переменную $def и что изменения, которые я делаю в конфиге, не кэшируются.

+0

Я смущен, почему у вас есть это 'if' там вообще; проверьте конец http://htmlpurifier.org/live/INSTALL - вы должны иметь возможность устанавливать эти значения конфигурации без необработанного определения HTML get. – pinkgothic

Смежные вопросы