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