變量過濾處理(PHP)

        最近自己寫了過濾類,主要利用率了filter函數。請指教!

<?php
/**
 * 參數驗證類
 * @author bob <[email protected]>
 * 
 * @version $Id $
 */
class Filter
{
    /**
     * 變量類型
     */
    public static $varType    = array(
                                 'GET'     => INPUT_GET,
                                 'POST'    => INPUT_POST,
                                 'COOKIE'  => INPUT_COOKIE,
                                 'SERVER'  => INPUT_SERVER,
                                 'ENV'     => INPUT_ENV
                                );
    /**
     * 字符類型
     *
     */
    public static $filterType = array(
                                 'STRING'  =>  FILTER_SANITIZE_STRING,
                                 'INT'     =>  FILTER_VALIDATE_INT,
                                 'BOOLEAN' =>  FILTER_VALIDATE_BOOLEAN,
                                 'FLOAT'   =>  FILTER_VALIDATE_FLOAT,
                                 'REGEXP'  =>  FILTER_VALIDATE_REGEXP,
                                 'URL'     =>  FILTER_VALIDATE_URL,
                                 'EMAIL'   =>  FILTER_VALIDATE_EMAIL,
                                 'IP'      =>  FILTER_VALIDATE_IP,
                                );
    
    /**
     * 檢查是否存在指定輸入類型的變量
     *
     * @param string $setVarType 類型 post get ……
     * @param string $varName    key
     *
     * @return void
     */
    public static function varExists($setVarType, $varName)
    {
        $FilterVarType = self::_getVarType($setVarType);

        if (is_null($FilterVarType)) {
            return false;
        }

        return filter_has_var(self::$varType[$FilterVarType], $varName);
    }
    
    /**
     * 過濾外部變量
     *
     * @param string $setVarType 類型 post get ……
     * @param string $varName    key
     * @param string $filterType filter type
     *
     * @return void
     */
    public static function filterInput($setVarType, $varName, $filterType = 'INT')
    {
        $FilterVarType = self::_getVarType($setVarType);
        $filterType    = self::_getFilterType($filterType);

        if (is_null($FilterVarType) || is_null($filterType)) {
            return false;
        }

        return filter_input($FilterVarType, $varName, $filterType);
    }
    
    /**
     * 通過指定的過濾器過濾變量
     *
     * @param string $var 變量
     * @param string $filterType 變量類型
     *
     * @return void
     */
    public static function filterVar($var, $filterType)
    {
        if (!trim($var)) {
            return false;
        }
       
        $filterType = self::_getFilterType($filterType);

        return filter_var($var, $filterType);
    }
    
    /**
     * 驗證是字符串
     *
     * @param string $var 要驗證字符
     *
     * @return void
     */
    public static function isString($var)
    {
        return self::filterVar($var, 'STRING');
    }
    
    /**
     * 驗證是整形
     *
     * @param string $var 要驗證字符
     *
     * @return void
     */
    public static function isInt($var)
    {
        return self::filterVar($var, 'INT');
    }
    
    /**
     * 驗證是布爾型
     *
     * @param string $var 要驗證字符
     *
     * @return void
     */
    public static function isBoolean($var)
    {
        return self::filterVar($var, 'BOOLEAN');
    }
    
    /**
     * 驗證是浮點型
     *
     * @param string $var 要驗證字符
     *
     * @return void
     */
    public static function isFloat($var)
    {
        return self::filterVar($var, 'FLOAT');
    }
    
    /**
     * 驗證URL格式
     *
     * @param string $var 要驗證字符
     *
     * @return void
     */
    public static function isUrl($var)
    {
        
        return self::filterVar($var, 'URL');
    }
    
    /**
     * 驗證EMAIL格式
     *
     * @param string $var 要驗證字符
     *
     * @return void
     */
    public static function isEmail($var)
    {

        return self::filterVar($var, 'EMAIL');
    }

    /**
     * 驗證手機號格
     *
     * @param string $var 要驗證字符
     *
     * @return void
     */
    public static function isPhone($var)
    {
        $filterType = 'regexp';
        $regexp  = array('options' => array("regexp" => '/^[1][358][0-9]{9}$/'));

        return self::regexp($var, $filterType, $regexp);
    }

    
    /**
     * 驗證IP格式
     *
     * @param string $var 要驗證字符
     *
     * @return void
     */
    public static function isIp($var)
    {
        return self::filterVar($var, 'IP');
    }

    /**
     * 正則校驗變量類型
     *
     * @param string $var    變量
     * @param array  $option array("options"=>array("regexp"=>"/^d(.*)/"))
     *
     * @return void
     */
    public static function regexp($var, $filterType, $option)
    {

        $filterType = self::_getFilterType($filterType);
        
        return filter_var($var, $filterType, $option);
    }

    /**
     * 驗證類型
     *
     * @param string $type
     * 
     * @return bool
     */
    public static function filterType($type)
    {
        $filter_list = self::_lists();
        return array_search($type, $filter_list) !== false ? true : false;
    }

    /**
     * 過濾字符串中的html標籤
     *
     * @param string $string 待轉換的字符串
     *
     * @return string
     */
    static public function stripTags($string)
    {
        return strip_tags($string);
    }

    /**
     * 過濾字符串中的回車換行
     *
     * @param string $string 待轉換的字符串
     *
     * @return string
     */
    static public function stripLines($string)
    {
        return str_replace(array("\n", "\r"), '', $string);
    }

    /**
     * 過濾字符串中<script>腳本
     *
     * @param string $string 待過濾的字符串
     *
     * @return string
     */
    static public function stripScript($string)
    {
        $reg = "/<script[^>]*?>.*?<\/script>/is";
        
        return preg_replace($reg, '', $string);
    }

    /**
     * 獲取字符類型
     * 
     * @return array
     */
    private static function _lists()
    {
        return filter_list();
    }

    /**
     * 驗證請求類型
     *
     * @param string $setVarType 變量類型 eg:post , get
     * 
     * @return void
     */
    private static function _getVarType($setVarType)
    {
        $setVarType = strtoupper($setVarType);

        return isset(self::$varType[$setVarType]) ? self::$varType[$setVarType] : null;
    }

    /**
     * 驗證字符類型
     *
     * @param string $setFilterType 字符類型 eg:int, string, url
     * 
     * @return void
     */
    private static function _getFilterType($setFilterType)
    {
        $setFilterType = strtoupper($setFilterType);

        return isset(self::$filterType[$setFilterType]) ? self::$filterType[$setFilterType] : null;
    }
    
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章