这是交易,我正在制作一个帮助人们教HTML的项目。当然,我害怕那个Scumbag Steve(见图1)。
所以我想阻止所有 HTML标记,除那些在非常具体的 白名单 上批准的标记。< / p>
在这些已批准的HTML标记中,我还希望删除有害的属性。例如onload
和onmouseover
。此外,根据白名单 。
我已经想到了正则表达式,但我很确定它是邪恶的,对这项工作没有多大帮助。
有人能给我一个正确的推动方向吗?
提前致谢。
图1。
答案 0 :(得分:5)
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,并且只接受某些属性。
答案 1 :(得分:1)
使用Zend framework 2 strip tags。下面的示例接受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);
答案 2 :(得分:0)
对于代码,您可以使用strip_tags