资讯专栏INFORMATION COLUMN

php 常用过滤类

zhouzhou / 1181人阅读

摘要:汉子汉字字母数字下划线正则表达式汉字字母数字下划线正则表达式您输入的含有违法字符您输入的完全合法通过哈哈过滤过滤字符串的长度被限制的字符串限制的字节数空超出限制值原字符串对字符串进行过滤处理被过滤的字符串过滤数

//$str = "汉hah子abc---ABC123_-";
//
////if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str)) //GB2312汉字字母数字下划线正则表达式
//if(!preg_match("#^[x{4e00}-x{9fa5}A-Za-z0-9_-]+$#u",$str))   //UTF-8汉字字母数字下划线正则表达式
//{
//    echo "您输入的[".$str."]含有违法字符";
//}else{
//    echo "您输入的[".$str."]完全合法,通过!";
//}
//
//exit;


//$email="afs###%-##@s.com";
//$result=filter_var($email,FILTER_VALIDATE_EMAIL);
//
//$str = "abcDFSDF哈哈1323@#%#$%#%$^&&*^&*";
//$sss = filter_var($str, FILTER_SANITIZE_STRIPPED);
//
//var_dump($sss);
//exit;


/**
 * @brief Filter 过滤
 */
class Filter
{
    /**
     * @brief 过滤字符串的长度
     * @param string $str 被限制的字符串
     * @param int $length 限制的字节数
     * @return string 空:超出限制值; $str:原字符串;
     */
    public static function limitLen($str,$length)
    {
        if($length !== false)
        {
            $count = IString::getStrLen($str);
            if($count > $length)
            {
                return "";
            }
            else
            {
                return $str;
            }
        }
        return $str;
    }

    /**
     * @brief 对字符串进行过滤处理
     * @param  string $str      被过滤的字符串
     * @param  string $type     过滤数据类型 值: int, float, string, text, bool, url
     * @param  int    $limitLen 被输入的最大字符个数 , 默认不限制;
     * @return string 被过滤后的字符串
     * @note   默认执行的是string类型的过滤
     */
    public static function act($str,$type = "string",$limitLen = false)
    {
        if(is_array($str))
        {
            $resultStr = array();
            foreach($str as $key => $val)
            {
                $key = self::act($key, $type, $limitLen);
                $val = self::act($val, $type, $limitLen);
                $resultStr[$key] = $val;
            }
            return $resultStr;
        }
        else
        {
            switch($type)
            {
                case "int":
                    return intval($str);
                    break;

                case "float":
                    return floatval($str);
                    break;

                case "text":
                    return self::text($str,$limitLen);
                    break;

                case "bool":
                    return (bool)$str;
                    break;

                case "url":
                    return self::clearUrl($str);
                    break;

                case "filename":
                    return self::fileName($str);
                    break;

                // 严格过滤字符串
                case "strict":
                    return self::strict($str);

                // 检测邮箱地址
                case "email":
                    return self::email();

                // 检测http网址
                case "http":
                    return self::http();

                default:
                    return self::string($str,$limitLen);
                    break;
            }
        }
    }

    /**
     * @brief  对字符串进行严格的过滤处理
     * @param  string  $str      被过滤的字符串
     * @param  int     $limitLen 被输入的最大长度
     * @return string 被过滤后的字符串
     * @note 过滤所有html标签和php标签以及部分特殊符号
     */
    public static function string($str,$limitLen = false)
    {
        $str = trim($str);
        $str = self::limitLen($str,$limitLen);
        $str = htmlspecialchars($str,ENT_NOQUOTES);
        return self::addSlash($str);
    }

    /**
     * @brief 对字符串进行普通的过滤处理
     * @param string $str      被过滤的字符串
     * @param int    $limitLen 限定字符串的字节数
     * @return string 被过滤后的字符串
     * @note 仅对于部分如:getRuntimePath()."htmlpurifier/";

        if(!file_exists($cache_dir))
        {
            IFile::mkdir($cache_dir);
        }
        $config = HTMLPurifier_Config::createDefault();

        //配置 允许flash
        $config->set("HTML.SafeEmbed",true);
        $config->set("HTML.SafeObject",true);
        $config->set("Output.FlashCompat",true);

        //配置 缓存目录
        $config->set("Cache.SerializerPath",$cache_dir); //设置cache目录

        //允许的target属性
        $def = $config->getHTMLDefinition(true);
        $def->addAttribute("a", "target", "Enum#_blank,_self,_target,_top");

        //过略掉所有                
阅读需要支付1元查看
<