本文实例讲述了php 过滤html标记属性类及其用法。是PHP项目开发中比较常见的实用技巧。分享给大家供大家参考。具体方法如下:

HtmlAttributeFilter.class.php类文件如下:

<"/<([^ !\/\>\n]+)([^>]*)>/i", $this->_str, $elements); 
    foreach($elements[1] as $el_key => $element){ 
      if($elements[2][$el_key]){ 
        $literal = $elements[0][$el_key]; 
        $element_name = $elements[1][$el_key]; 
        $attributes = $elements[2][$el_key]; 
        if(is_array($this->_ignore) && !in_array($element_name, $this->_ignore)){ 
          $nodes[] = array('literal'=>$literal, 'name'=>$element_name, 'attributes'=>$attributes); 
        } 
      } 
    } 
 
    if(!$nodes[0]){ 
      return $this->_str; 
    }else{ 
      return $nodes; 
    } 
  } 
 
  /** 搜寻属性 
  * @param Array $nodes 需要处理的元素 
  */ 
  private function findAttributes($nodes){ 
    foreach($nodes as &$node){ 
      preg_match_all("/([^ =]+)\s*=\s*[\"|']{0,1}([^\"']*)[\"|']{0,1}/i", $node['attributes'], $attributes); 
      if($attributes[1]){ 
        foreach($attributes[1] as $att_key=>$att){ 
          $literal = $attributes[0][$att_key]; 
          $attribute_name = $attributes[1][$att_key]; 
          $value = $attributes[2][$att_key]; 
          $atts[] = array('literal'=>$literal, 'name'=>$attribute_name, 'value'=>$value); 
        } 
      }else{ 
        $node['attributes'] = null; 
      } 
      $node['attributes'] = $atts; 
      unset($atts); 
    } 
    return $nodes; 
  } 
 
  /** 移除属性 
  * @param Array $nodes 需要处理的元素 
  */ 
  private function removeAttributes($nodes){ 
    foreach($nodes as $node){ 
      $node_name = $node['name']; 
      $new_attributes = ''; 
      if(is_array($node['attributes'])){ 
        foreach($node['attributes'] as $attribute){ 
          if((is_array($this->_allow) && in_array($attribute['name'], $this->_allow)) || $this->isException($node_name, $attribute['name'], $this->_exception)){ 
            $new_attributes = $this->createAttributes($new_attributes, $attribute['name'], $attribute['value']); 
          } 
        } 
      } 
      $replacement = ($new_attributes) "<$node_name $new_attributes>" : "<$node_name>"; 
      $this->_str = preg_replace('/'.$this->protect($node['literal']).'/', $replacement, $this->_str); 
    } 
  } 
 
  /** 判断是否特例 
  * @param String $element_name  元素名 
  * @param String $attribute_name 属性名 
  * @param Array $exceptions   允许的特例 
  * @return boolean 
  */ 
  private function isException($element_name, $attribute_name, $exceptions){ 
    if(array_key_exists($element_name, $this->_exception)){ 
      if(in_array($attribute_name, $this->_exception[$element_name])){ 
        return true; 
      } 
    } 
    return false; 
  } 
 
  /** 创建属性 
  * @param String $new_attributes 
  * @param String $name 
  * @param String $value 
  * @return String 
  */ 
  private function createAttributes($new_attributes, $name, $value){ 
    if($new_attributes){ 
      $new_attributes .= " "; 
    } 
    $new_attributes .= "$name=\"$value\""; 
    return $new_attributes; 
  } 
 
 
  /** 特殊字符转义 
  * @param String $str 源字符串 
  * @return String 
  */ 
  private function protect($str){ 
    $conversions = array( 
      "^" => "\^",  
      "[" => "\[",  
      "." => "\.",  
      "$" => "\$",  
      "{" => "\{",  
      "*" => "\*",  
      "(" => "\(",  
      "\\" => "\\\\",  
      "/" => "\/",  
      "+" => "\+",  
      ")" => "\)",  
      "|" => "\|",  
      "" => "\",  
      "<" => "\<",  
      ">" => "\>"  
    ); 
    return strtr($str, $conversions); 
  } 
 
} // class end 
 
"htmlcode">
<"bd clearfix" id="index_hilite_ul"><ul class="list"><li><img src="/UploadFiles/2021-04-02/logo_white.png">本机下载。

希望本文所述对大家的PHP程序设计有所帮助。

标签:
php,过滤,html,标记,属性,类

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
评论“php过滤html标记属性类用法实例”
暂无“php过滤html标记属性类用法实例”评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。