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 常用过滤类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “水边闲坐一绳床”下一句是什么
- 下一篇: 康佳电视质量怎么样?