Как удалить определенные теги и определенные атрибуты из строки?

Вот сделка, я делаю проект, чтобы помочь преподавать HTML людям. Естественно, я боюсь этого Скумага Стива (см. Рисунок 1).

Поэтому я хотел заблокировать ВСЕ теги HTML, за исключением тех, которые были одобрены в очень белом списке .

Из тех утвержденных тегов HTML я хочу также удалить вредные атрибуты . Такие, как onload и onmouseover . Кроме того, согласно белому списку .

Я думал о регулярном выражении, но я уверен, что это зло и не очень полезно для работы.

Может ли кто-нибудь подтолкнуть вас в правильном направлении?

Заранее спасибо.


Рисунок 1.

Скумгаг Стив

 require_once 'library/HTMLPurifier.auto.php'; $config = HTMLPurifier_Config::createDefault(); // this one is needed cause otherwise stuff // considered harmful like input's will automatically be deleted $config->set('HTML.Trusted', true); // this line say that only input, p, div will be accepted $config->set('HTML.AllowedElements', 'input,p,div'); // set attributes for each tag $config->set('HTML.AllowedAttributes', 'input.type,input.name,p.id,div.style'); // more extensive way of manage attribute and elements... see the docs // http://htmlpurifier.org/live/configdoc/plain.html $def = $config->getHTMLDefinition(true); $def->addAttribute('input', 'type', 'Enum#text'); $def->addAttribute('input', 'name', 'Text'); // call... $purifier = new HTMLPurifier($config); // display... $html = $purifier->purify($raw_html); 
  • ПРИМЕЧАНИЕ. По мере того, как вы просили, чтобы этот код выполнялся как белый список, принимались только входные данные, p и div и подтверждались только атрибуты.

Используйте ленточные метки Zend framework 2 . Пример ниже для принятия ul, li, p … и img (только с атрибутом src) и ссылок (только с href atttribute). Все остальное будет разделено. Если я не ошибаюсь, zf1 делает то же самое

  $filter = new \Zend\Filter\StripTags(array( 'allowTags' => array( 'ul'=>array(), 'li'=>array(), 'p'=>array(), 'br'=>array(), 'img'=>array('src'), 'a'=>array('href') ), 'allowAttribs' => array(), 'allowComments' => false) ); $value = $filter->filter($value); 

Для тегов вы можете использовать strip_tags

Для атрибутов см. Как удалить атрибуты из тега html?