php 过滤类,php 常用过滤类

//$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 仅对于部分如:

public static function text($str,$limitLen = false)

{

$str = self::limitLen($str,$limitLen);

$str = trim($str);

require_once(dirname(__FILE__)."/htmlpurifier/HTMLPurifier.standalone.php");

$cache_dir=IWeb::$app->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');

//过略掉所有

$purifier = new HTMLPurifier($config);

return self::addSlash($purifier->purify($str));

}

/**

* @brief 增加转义斜线

* @param string $str 要转义的字符串

* @return string 转义后的字符串

*/

public static function addSlash($str)

{

if(is_array($str))

{

$resultStr = array();

foreach($str as $key => $val)

{

$resultStr[$key] = self::addSlash($val);

}

return $resultStr;

}

else

{

return addslashes($str);

}

}

/**

* @brief 去掉转义斜线

* @param string $str 要转义的字符串

* @return string 去掉转义的字符串

*/

public static function stripSlash($str)

{

if(is_array($str))

{

$resultStr = array();

foreach($str as $key => $val)

{

$resultStr[$key] = self::stripSlash($val);

}

return $resultStr;

}

else

{

return stripslashes($str);

}

}

/**

* @brief 检测文件是否有可执行的代码

* @param string $file 要检查的文件路径

* @return boolean 检测结果

*/

public static function checkHex($file)

{

$resource = fopen($file, 'rb');

$fileSize = filesize($file);

fseek($resource, 0);

// 读取文件的头部和尾部

if ($fileSize > 512)

{

$hexCode = bin2hex(fread($resource, 512));

fseek($resource, $fileSize - 512);

$hexCode .= bin2hex(fread($resource, 512));

}

// 读取文件的全部内容

else

{

$hexCode = bin2hex(fread($resource, $fileSize));

}

fclose($resource);

/* 匹配16进制中的 <% ( ) %> */

/* 匹配16进制中的 <? ( ) ?> */

/* 匹配16进制中的

if (preg_match("/(3c25.*?28.*?29.*?253e)|(3c3f.*?28.*?29.*?3f3e)|(3C534352495054.*?2F5343524950543E)|(3C736372697074.*?2F7363726970743E)/is", $hexCode))

{

return false;

}

else

{

return true;

}

}

/**

* 清理URL地址栏中的危险字符,防止XSS注入攻击

* @param string $url

* @return string

*/

public static function clearUrl($url)

{

$string = filter_var($url, FILTER_VALIDATE_URL);

// if(preg_match('/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?\/?/i', $url)){

// echo $string;

// exit;

// }

return $string;

//return str_replace(array('\'','"','',"\\","<",">"),'',$url);

}

/**

* @brief 严格过滤字符串 ( 准许特殊字符 ._-)

* @param string $string 参数字符串

* @return string

*/

public static function strict($string)

{

// |^[\w\.\s<>=\!\x{4e00}-\x{9fa5}]+$|u

if(preg_match('#^[\w\.\s\-\x{4e00}-\x{9fa5}]+$#u', $string) == true)

{

return $string;

}

return false;

}

/**

* @brief 检测邮箱地址是否合法( 正则加 DNS验证 )

* @param $string

* @return string

*/

public static function email($string)

{

$string = filter_var($string, FILTER_VALIDATE_EMAIL);

$preg_email = '/^([a-z0-9_]|-|.)+@(([a-z0-9_]|-)+.){1,2}[a-z]{2,4}$/i';

if(!empty($string) && preg_match($preg_email, $string) == true){

$checkString = array_pop(explode("@", $string));

if(true == checkdnsrr($checkString, 'MX')){

return $string;

}

}

return false;

}

}

// $strictString = Filter::strict('asdfasdfasdf哈ss..哈身A-bsc12345_份卡萨打飞机');

// $email = Filter::email('asdfsadfdasdssssfdfdeerew#126.com');

$url = Filter::clearUrl('://jzsfdasfsadf');

var_dump($url);

exit;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值