1. 云栖社区>
  2. PHP教程>
  3. 正文

php 常用过滤类

作者:用户 来源:互联网 时间:2017-12-01 15:45:26

常用

php 常用过滤类 - 摘要: 本文讲的是php 常用过滤类, //$str = '汉hah子abc---ABC123_-';//////if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str)) //GB2312汉字字母数

//$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 "<font color=red>您输入的[".$str."]含有违法字符</font>";//}else{//echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>";//}////exit;//$email='afs###%-##@s.com';//$result=filter_var($email,FILTER_VALIDATE_EMAIL);////$str = 'abcDFSDF哈哈[email protected]#%#$%#%$^&&*^&*';//$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 仅对于部分如:<script,<iframe等标签进行过滤 */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目录//允许<a>的target属性$def = $config->getHTMLDefinition(true);$def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');//过略掉所有<script>,<i?frame>标签的on事件,css的js-expression、import等js行为,a的js-href$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进制中的 <script  /script>  */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}]+$|uif(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_]|-|.)[email protected](([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;

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索常用 ,以便于您获取更多的相关知识。