preg_match_all('/<([a-z]*)\b[^>]*>(.*?)</\1>/i'$html,$matches);
打破表达
第一/
是分隔符
的<
在标记的开始,第一个<
的([a-z]*)
开始匹配标签名所以fir实例< 强
的\b[^>]*
说,一旦你找到了一个空间,不停地寻找所有单词
的>
说,它希望在上一节继续找,直到找到第一个>
的(.*?)
说,不断寻找和收集(..)里面的字符串,但是,我们有一个?
,然后停止看,当你发现在大括号后面的下一个字符。
的</\1>
说我想匹配,但只有当里面的值是一样的第一个比赛,这是由\1
在比赛, the value of this would be what's found with
做([A-Z] *)`。
那么你可以使用preg_match_all所有与内容找到他们,阵列输出会是这样的
array(
0 > THE WHOLE TAG
1 > TAG NAME
2 > TAG VALUE
)
希望它能帮助:)
〔实施例
$allowed = array('b','strong','i','pre','code'); WHITELIST, never blacklist
foreach($matchas as $match)
{
if(!in_array($match[1],$allowed))
{
echo sprintf('The tag %s is disallowed!',$match[1]);
}
}
因此,这将返回$ html中的所有标签,然后我可以检查不需要的标签? – YsoL8 2010-08-27 10:24:57
是不好更新的例子。 – RobertPitt 2010-08-27 10:40:07
谢谢!看起来很简单。 – YsoL8 2010-08-27 10:45:35