程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php過濾html標記屬性類

php過濾html標記屬性類

編輯:PHP綜合

HtmlAttributeFilter.class.php

<?php  
/** HTML Attribute Filter 
*   Date:   2013-09-22 
*   Author: fdipzone 
*   ver:    1.0 
* 
*   Func: 
*   public  strip              過濾屬性 
*   public  setAllow           設置允許的屬性 
*   public  setException       設置特例 
*   public  setIgnore          設置忽略的標記 
*   private findElements       搜尋需要處理的元素 
*   private findAttributes     搜尋屬性 
*   private removeAttributes   移除屬性 
*   private isException        判斷是否特例 
*   private createAttributes   創建屬性 
*   private protect            特殊字符轉義 
*/
      
class HtmlAttributeFilter{ // class start  
      
    private $_str = '';            // 源字符串  
    private $_allow = array();     // 允許保留的屬性 例如:array('id','class','title')  
    private $_exception = array(); // 特例 例如:array('a'=>array('href','class'),'span'=>array('class'))  
    private $_ignore = array();    // 忽略過濾的標記 例如:array('span','img')  
      
      
    /** 處理HTML,過濾不保留的屬性 
    * @param  String $str 源字符串 
    * @return String 
    */
    public function strip($str){  
        $this->_str = $str;  
      
        if(is_string($this->_str) && strlen($this->_str)>0){ // 判斷字符串  
      
            $this->_str = strtolower($this->_str); // 轉成小寫  
      
            $res = $this->findElements();  
            if(is_string($res)){  
                return $res;  
            }  
            $nodes = $this->findAttributes($res);  
            $this->removeAttributes($nodes);  
        }  
      
        return $this->_str;  
    }  
      
      
    /** 設置允許的屬性 
    * @param Array $param 
    */
    public function setAllow($param=array()){  
        $this->_allow = $param;  
    }  
      
      
    /** 設置特例 
    * @param Array $param 
    */
    public function setException($param=array()){  
        $this->_exception = $param;  
    }  
      
      
    /** 設置忽略的標記 
    * @param Array $param 
    */
    public function setIgnore($param=array()){  
        $this->_ignore = $param;  
    }  
      
      
    /** 搜尋需要處理的元素 */
    private function findElements(){  
        $nodes = array();  
        preg_match_all("/<([^ !\/\>\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 需要處理的元素 
	* 查看本欄目
		
							
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved