Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从字符串中剥离特定标记和特定属性?_Php_Html_Whitelist - Fatal编程技术网

Php 如何从字符串中剥离特定标记和特定属性?

Php 如何从字符串中剥离特定标记和特定属性?,php,html,whitelist,Php,Html,Whitelist,这里的交易,我正在做一个项目,以帮助教HTML的人。当然,我害怕那个混蛋史蒂夫(见图1) 所以我想阻止所有的HTML标签,除了那些在一个非常特定的白名单上被批准的标签 在那些经过批准的HTML标记中,我还想删除有害的属性。例如onload和onmouseover。此外,根据白名单, 我想到过regex,但我很确定它是邪恶的,对工作没有多大帮助 谁能给我一个正确的方向 提前谢谢 图1 有关可以使用的标记 有关属性,请参阅 演示: 注意:如您所问,此代码将作为白名单运行,只接受input、p

这里的交易,我正在做一个项目,以帮助教HTML的人。当然,我害怕那个混蛋史蒂夫(见图1)

所以我想阻止所有的HTML标签,除了那些在一个非常特定的白名单上被批准的标签

在那些经过批准的HTML标记中,我还想删除有害的属性。例如
onload
onmouseover
。此外,根据白名单,

我想到过regex,但我很确定它是邪恶的,对工作没有多大帮助

谁能给我一个正确的方向

提前谢谢


图1

有关可以使用的标记

有关属性,请参阅

  • 演示:
  • 注意:如您所问,此代码将作为白名单运行,只接受input、p和div,只接受某些属性
使用。下面是一个接受ul,li,p。。。和img(仅使用src属性)和链接(仅使用href attribute)。其他一切都将被剥夺。如果我没有错的话,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);

实际上,使用正则表达式是一种方法。至少,我强烈推荐它。它们将为您提供极大的灵活性和对正在解析的字符串的控制。方法@Deleteman:是的,但我已经说过我想要一个白名单,而不是黑名单,这意味着,除了一些特定的标记,所有东西都被阻止了。我不知道如何用正则表达式处理这个问题(如果你能举一个小规模的例子那就太好了)@Truth我可以,但aSeptik发布的htmlpurifier.org似乎是你的解决方案:)@aSeptik:下面是:不应该删除输入属性,为什么要删除?我不想要所有的属性(因为有些属性是学习所必需的),我希望允许特定的行为,这在你的第二个链接中似乎没有提到。我认为在IE中使用样式属性可能会造成一些伤害。至少在正常的样式表中,你可以引用基于javascript的行为文件。@ThiefMaster:是的,但不要担心HTMLPurifier会自动删除对.htc文件的任何引用!;-)完美答案!记录和一切+1+接受。非常感谢。
     $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);