求教PHP使用正则表达式提取html标签属性的方法?

正在用PHP写一个过滤HTML的函数,如果有HTML标签就把常用的几个属性提取出来(比如:style,class,href,target,alt)其他的则不要。
比如:

<strong class="123" style="white-space: normal;" onload="asdasdas()">12313123&nbsp</strong>

不需要onload="asdasdas()",只需要下面部分

<strong class="123" style="white-space: normal;">12313123&nbsp</strong>

像:

<strong onload="asdasdas()">eeeeee&nbsp</strong>

只需要下面部分

<strong>eeeeee&nbsp</strong>

下面是在写的代码,达不到预期,请教解决方法

$html = '<strong style="white-space: normal;" class="123" onload="asdasdas()">&nbsp</strong><div class="ccc">aaaaa</div>
<p style="white-space: normal;">bbbbb</p>
<strong class="123" style="white-space: normal;" onload="asdasdas()">12313123&nbsp</strong>
<strong onload=\'asdasdas()\'>eeeeee&nbsp</strong><a href="http://www.xxx.com" target="_blank" class="aaaa">链接链接</a><p>ffff</p>';

$pattern = '/<([a-z]+)( style=".*?"| class=".*?"| href=".*?"| target=".*?"| alt=".*?"){0,5}.*?>/i';
$replacement = '<$1$2>';
$result = preg_replace($pattern, $replacement, $html);
echo $result;

结果:

<strong class="123">&nbsp</strong><div class="ccc">aaaaa</div>
<p style="white-space: normal;">bbbbb</p>
<strong style="white-space: normal;">12313123&nbsp</strong>
<strong>getURL()&nbsp</strong><a class="aaaa">链接链接</a><p>ffff</p>
阅读 3.3k
2 个回答

代码

$re = '/\bon\w+=([\'"]).*?\1/m';
$str = '<strong style="white-space: normal;" class="123" onload="asdasdas()">&nbsp</strong><div class="ccc">aaaaa</div>
<p style="white-space: normal;">bbbbb</p>
<strong class="123" style="white-space: normal;" onload="asdasdas()">12313123&nbsp</strong>
<strong onload=\'asdasdas()\'>eeeeee&nbsp</strong><a href="http://www.xxx.com" target="_blank" class="aaaa">链接链接</a><p>ffff</p>';
$subst = '';

$result = preg_replace($re, $subst, $str);

echo "替换的结果是 ".$result;

点击查看匹配
https://hiregex.com/r/HXNER1/1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏