分类
快捷导航

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;
复制代码
您需要登录后才可以回帖 登录 | 注册加入

本版积分规则


6关注

42粉丝

4205帖子

会员达人更多+
广告位

热门推荐

更多+

最新信息

更多+
Copyright  © 2015-2016  Discuz!扩展中心  Powered   by  Discuz!  技术支持:迪恩网络  |   ( 浙ICP备14042422号 )QQ机器人
中国互联网违法和不良信息举报中心
南昌网络警察报警平台
经营性网站备案信息
南昌市公安局网监备案
赣公网安备案