//$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;

php 严格过滤,php 常用过滤类相关推荐

  1. php 采集 过滤,dedecms采集过滤规则 万能采集过滤代码 常用过滤

    织梦dedecms自带的采集系统确实很不错,可以免去一些手工添加信息的麻烦,设置一下dede采集规则.采集点,然后点采集,OK,几百篇文章就搞定了! 呵呵,确实很省事的!下面介绍几种常用采集规则的过滤 ...

  2. php 正则替换 ubb,php实现过滤UBB代码的类

    本文实例讲述了php实现过滤UBB代码的类.分享给大家供大家参考.具体如下: PHP代码如下: class Day{ function ubb($Text) {      /// UBB代码转换 // ...

  3. Magento模型集合addFieldToFilter常用过滤条件

    下载: 深入理解Magento.pdf 记录一下Magento模型集合Model Collection中addFieldToFilter()方法常用的过滤条件.以下参数也同样适用于产品实体的addAt ...

  4. Linux 使用grep过滤多个条件及grep常用过滤命令

    这篇文章主要介绍了Linux 使用grep筛选多个条件及grep常用过滤命令,需要的朋友可以参考下 cat log.txt | grep 条件: cat log.txt | grep 条件一 | gr ...

  5. Wireshark抓包及常用过滤方法

    一.抓包 实际遇到组件服务间的报错问题时,通过日志无法快速看出原因,可通过抓包的方式来快速查看接口返回信息及错误提示,使用如下命令可实现对某个端口进行抓包: tcpdump -i any -w /op ...

  6. Wireshark 常用过滤使用方法

    文章目录 一.常用过滤方法 二.常用的使用方式 三.TCP 连接:SYN,ACK,RST,UTG,PSH,FIN 一.常用过滤方法 过滤源 ip.目的 ip 在 wireshark 的过滤规则框 Fi ...

  7. Wireshark常用过滤使用方法

    过滤源ip.目的ip. 在wireshark的过滤规则框Filter中输入过滤条件.如查找目的地址为192.168.101.8的包,ip.dst==192.168.101.8:查找源地址为ip.src ...

  8. javascript 总结(常用工具类的封装)(转)

    转载地址:http://dzblog.cn/article/5a6f48afad4db304be1e7a5f javascript 总结(常用工具类的封装) JavaScript 1. type 类型 ...

  9. javascript常用工具类整理(copy)

    JavaScript常用工具类 类型 日期 数组 字符串 数字 网络请求 节点 存储 其他 1.类型 isString (o) { //是否字符串return Object.prototype.toS ...

最新文章

  1. c语言s开头的函数以及作用,C语言函数大全-s开头-完整版.doc
  2. Tensorflow 自动文摘: 基于Seq2Seq+Attention模型的Textsum模型
  3. 【NoSQL】抛弃VIP,使用consul和sentinel构建redis的高可用系统
  4. python 两台机器之间传递数据_Python:通过套接字在两台计算机之间发送数据
  5. Eclipse安装最新SVN插件方法
  6. 如何避免大规模线上故障?
  7. html 网页整体的背景色,HTML 背景
  8. LDA(Latent Dirichlet Allocation)简介
  9. 《武义九州》隐私政策
  10. python与城市规划_读书报告:地理信息系统与城市规划管理
  11. mysql中select使用方法_MySQL中select语句介绍及使用示例
  12. matlab飞思卡尔工具包,IMX6开发板飞思卡尔系统烧写工具MFGTool2工具详解-迅为电子...
  13. 手把手教你如何向 Linux 内核提交代码
  14. 浏览器自动化操作(Web Browser Automation)(一)
  15. 解析春运玄学:携程飞猪去哪儿们的抢票加速包,到底灵不灵?
  16. 收集英语单词及释义的前期准备工作
  17. oracle移动文件命令是什么意思,Oracle使用命令移动各类文件的方法
  18. 一加8T 原装65W WARP闪充 充电功率记录
  19. microbit python_刘鹏涛老师用Microbit 学Python系列教程
  20. 贷后催收中的风险联动管控指标

热门文章

  1. 外包工作经历暨2021年终总结
  2. 2018半年总结:走过的路
  3. 解决Python模块报错:ModuleNotFoundError: No module name 'StringIO'
  4. AI人工智能天机芯芯片
  5. 畸变的单目摄像机标定
  6. 深度学习点云语义分割:CVPR2019论文阅读
  7. 模拟Servlet本质
  8. 2021年大数据Spark(十二):Spark Core的RDD详解
  9. Android自定义View —— TypedArray
  10. 查看Ubuntu 系统的版本