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;
php 严格过滤,php 常用过滤类相关推荐
- php 采集 过滤,dedecms采集过滤规则 万能采集过滤代码 常用过滤
织梦dedecms自带的采集系统确实很不错,可以免去一些手工添加信息的麻烦,设置一下dede采集规则.采集点,然后点采集,OK,几百篇文章就搞定了! 呵呵,确实很省事的!下面介绍几种常用采集规则的过滤 ...
- php 正则替换 ubb,php实现过滤UBB代码的类
本文实例讲述了php实现过滤UBB代码的类.分享给大家供大家参考.具体如下: PHP代码如下: class Day{ function ubb($Text) { /// UBB代码转换 // ...
- Magento模型集合addFieldToFilter常用过滤条件
下载: 深入理解Magento.pdf 记录一下Magento模型集合Model Collection中addFieldToFilter()方法常用的过滤条件.以下参数也同样适用于产品实体的addAt ...
- Linux 使用grep过滤多个条件及grep常用过滤命令
这篇文章主要介绍了Linux 使用grep筛选多个条件及grep常用过滤命令,需要的朋友可以参考下 cat log.txt | grep 条件: cat log.txt | grep 条件一 | gr ...
- Wireshark抓包及常用过滤方法
一.抓包 实际遇到组件服务间的报错问题时,通过日志无法快速看出原因,可通过抓包的方式来快速查看接口返回信息及错误提示,使用如下命令可实现对某个端口进行抓包: tcpdump -i any -w /op ...
- Wireshark 常用过滤使用方法
文章目录 一.常用过滤方法 二.常用的使用方式 三.TCP 连接:SYN,ACK,RST,UTG,PSH,FIN 一.常用过滤方法 过滤源 ip.目的 ip 在 wireshark 的过滤规则框 Fi ...
- Wireshark常用过滤使用方法
过滤源ip.目的ip. 在wireshark的过滤规则框Filter中输入过滤条件.如查找目的地址为192.168.101.8的包,ip.dst==192.168.101.8:查找源地址为ip.src ...
- javascript 总结(常用工具类的封装)(转)
转载地址:http://dzblog.cn/article/5a6f48afad4db304be1e7a5f javascript 总结(常用工具类的封装) JavaScript 1. type 类型 ...
- javascript常用工具类整理(copy)
JavaScript常用工具类 类型 日期 数组 字符串 数字 网络请求 节点 存储 其他 1.类型 isString (o) { //是否字符串return Object.prototype.toS ...
最新文章
- c语言s开头的函数以及作用,C语言函数大全-s开头-完整版.doc
- Tensorflow 自动文摘: 基于Seq2Seq+Attention模型的Textsum模型
- 【NoSQL】抛弃VIP,使用consul和sentinel构建redis的高可用系统
- python 两台机器之间传递数据_Python:通过套接字在两台计算机之间发送数据
- Eclipse安装最新SVN插件方法
- 如何避免大规模线上故障?
- html 网页整体的背景色,HTML 背景
- LDA(Latent Dirichlet Allocation)简介
- 《武义九州》隐私政策
- python与城市规划_读书报告:地理信息系统与城市规划管理
- mysql中select使用方法_MySQL中select语句介绍及使用示例
- matlab飞思卡尔工具包,IMX6开发板飞思卡尔系统烧写工具MFGTool2工具详解-迅为电子...
- 手把手教你如何向 Linux 内核提交代码
- 浏览器自动化操作(Web Browser Automation)(一)
- 解析春运玄学:携程飞猪去哪儿们的抢票加速包,到底灵不灵?
- 收集英语单词及释义的前期准备工作
- oracle移动文件命令是什么意思,Oracle使用命令移动各类文件的方法
- 一加8T 原装65W WARP闪充 充电功率记录
- microbit python_刘鹏涛老师用Microbit 学Python系列教程
- 贷后催收中的风险联动管控指标