找回密码
 注册加入

扫一扫,极速登录

QQ登录

只需一步,快速开始

搜索
查看: 7023|回复: 0

Php 过滤html标签,只保留指定属性

[复制链接]
发表于 2012-12-16 17:09:39 | 显示全部楼层 |阅读模式
  1. function parse($m){  return call_user_func("parse{$m[1]}",$m[3]);}

  2. function parsea($str,$attr=array('href')){  return '<a '.parseattr($str,$attr).'>';}

  3. function parsep($str,$attr=array('align','id')){  return '<p '.parseattr($str,$attr).'>';}

  4. function parseattr($str,$attr=array()){  if(empty($attr))return '';  $attrs=explode(' ', $str);  foreach ($attrs as $k=>$v)  {    foreach ($attr as $a)    {      if(strtolower(substr($v, 0,strlen($a)).'=')===strtolower($a.'='))      {        continue 2;      }    }    unset($attrs[$k]);  }  return implode(' ', $attrs);}

  5. function myreplace($str){  $reg='/<(p|a)(\s+)(.*?[^>])>/is';
  6. return (preg_replace_callback($reg,'parse',$str));}

  7. $str='<p align="center" class="asd" id="qwe">adf<a href="#" class="asd" id="qwe" align="center">123</a><div id="iii" style="color:red">4<p id="ww">5</p>6</div></p>';

  8. echo myreplace(strip_tags($str,'<p><a>'));

  9. //<p align="center" id="qwe">adf<a href="#">123</a>4<p id="ww">5</p>6</p>


  10. 重构版:Only for php5.3

  11. function parseattr($str,$tag,$attr=array())
  12. {
  13. if(empty($attr))return '';
  14. $attrs=explode(' ', $str[2]);
  15. foreach ($attrs as $k=>$v)
  16. {
  17. foreach ($attr as $a)
  18. {
  19. if(strtolower(substr($v, 0,strlen($a)).'=')==strtolower($a.'='))
  20. {
  21. continue 2;
  22. }
  23. }
  24. unset($attrs[$k]);
  25. }
  26. return '< '.$tag.' '.implode(' ', $attrs).'>';
  27. }
  28. function myreplace($str,$tag,$attr=array())
  29. {
  30. $reg='/< '.$tag.'(\s+)(.*?[^>])>/is';
  31. return (preg_replace_callback($reg,function ($v) use ($attr,$tag){return parseattr($v,$tag,$attr);},$str));
  32. }

  33. $str='<p align="center" class="asd" id="qwe">adf<a href="#" class="asd" id="qwe" align="center" rel="nofollow">123<div id="iii" style="color:red">4<p id="ww">56';

  34. $str=strip_tags($str,'<p><a>');
  35. $str=myreplace($str,'a',array('href'));
  36. $str=myreplace($str,'p',array('align','id'));
  37. echo $str;
复制代码
您需要登录后才可以回帖 登录 | 注册加入  

本版积分规则

Archiver|手机版|小黑屋|Discuz!扩展中心 ( 浙ICP备14042422号-1 )|网站地图QQ机器人

GMT+8, 2024-4-20 16:23 , Processed in 0.156040 second(s), 15 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表