1.   本网站所有源码包解压密码:www.youhutong.com
会员登录  帮助问答

(TP5框架)ThinkPHP5重写param函数方法(支持接收数组等),并对参数安全检测、并全角字符转半角字符。

小川 技术文章
查看演示   下载源码  
【温馨提示】源码包解压密码:www.youhutong.com

把字符串中含有的全角字符.全部转换为半角字符.

如果可以的话最接收表单数据时.我们可以封装一个接收表单数据公用函数.然后直接在里面调用我们的全角转半角方法函数就行了.

下面代码奉上!

有问题可以留言交流.一起学习.


一:把字符串中含有全角的全部转换成对应半角字符方法代码:

/**
* 全角字符转换为半角字符
* author: xiaochuan
* @access public
* @param  string $str 待转换字串
* @return string $str 处理后字串
*/
function str_angle($str){
$arr = array(
    '0' => '0', 
    '1' => '1', 
    '2' => '2', 
    '3' => '3', 
    '4' => '4',
    '5' => '5', 
    '6' => '6', 
    '7' => '7', 
    '8' => '8', 
    '9' => '9',
    'A' => 'A', 
    'B' => 'B', 
    'C' => 'C', 
    'D' => 'D', 
    'E' => 'E',
    'F' => 'F', 
    'G' => 'G', 
    'H' => 'H', 
    'I' => 'I', 
    'J' => 'J',
    'K' => 'K', 
    'L' => 'L', 
    'M' => 'M', 
    'N' => 'N', 
    'O' => 'O',
    'P' => 'P', 
    'Q' => 'Q', 
    'R' => 'R', 
    'S' => 'S', 
    'T' => 'T',
    'U' => 'U', 
    'V' => 'V', 
    'W' => 'W', 
    'X' => 'X', 
    'Y' => 'Y',
    'Z' => 'Z', 
    'a' => 'a', 
    'b' => 'b', 
    'c' => 'c', 
    'd' => 'd',
    'e' => 'e', 
    'f' => 'f', 
    'g' => 'g', 
    'h' => 'h', 
    'i' => 'i',
    'j' => 'j', 
    'k' => 'k', 
    'l' => 'l', 
    'm' => 'm', 
    'n' => 'n',
    'o' => 'o', 
    'p' => 'p', 
    'q' => 'q', 
    'r' => 'r', 
    's' => 's',
    't' => 't', 
    'u' => 'u', 
    'v' => 'v', 
    'w' => 'w', 
    'x' => 'x',
    'y' => 'y', 
    'z' => 'z',
    '(' => '(', 
    ')' => ')', 
    '[' => '[', 
    ']' => ']', 
    '[' => '[',
    ']' => ']', 
    '[' => '[', 
    ']' => ']', 
    '[' => '[', 
    '"' => ']',
    '`' => '[', 
    "'" => ']', 
    '{' => '{', 
    '}' => '}', 
    '' => '>',
    '%' => '%', 
    '+' => '+', 
    '-' => '-', 
    '-' => '-', 
    '-' => '-',
    ':' => ':', 
    '.' => '.', 
    '.' => ',', 
    '.' => '.', 
    '.' => '.',
    ',' => ',', 
    '?' => '?', 
    '!' => '!', 
    '-' => '-', 
    '|' => '|',
    '"' => '"', 
    "'" => '`', 
    '`' => '`', 
    '|' => '|', 
    '"' => '"',
    ' ' => ' '
);



if(is_array($str)){
		$str = implode('{YHT}', $str);
		$newstr = strtr($str, $arr);
		return explode('{YHT}', $newstr);
	}else{
		return strtr($str, $arr);
	}
	
}

二:为了方便.接收POST.GET数据.我直接封装了一个公共函数.以后需要接收数据时就可 直接调用这个函数了.好处是.有什么验证规则等等.后期都可直接在这个函数中处理了.

下面是我封装的一处理表单数据的一个公共函数(TP5的).

/**
 * 正确获取参数(适用用THINKPHP5.0框架)
 * author: xiaochuan
 * @param: string $var 参数
 * @param: boolean $check 是否开启常规安全检测
 * return: mixed
 */
function param($name, $check=false)
{	
	if(strpos($name, '/')) {
		list($var, $key) = explode('/', $name);
	}else{
		$var = $name;
	}
	
	if(input('?post.'.$var)){
		$value = input('post.'.$name);
	}else if(input('?get.'.$var)){
		$value = input('get.'.$name);
	}else if(input('?param.'.$var)){
		$value = input('param.'.$name);
	}else{
		$value = '';
	}

	if($check && !check_param($value)) exception('非法参数');

	return str_angle($value);
}

/**
 * 正确获取参数 (适用用CI框架)
 * author: xiaochuan
 * @param: string  $var   参数
 * @param: boolean  $check   是否检测
 * return: mixed
 */
function param($var, $check=false)
{
    if(get_instance()->input->post($var)){
        $value = get_instance()->input->post($var);
    }else if(get_instance()->input->get($var)){
        $value = get_instance()->input->get($var);
    }else{
        $value = '';
    }
    if($check && !check_param($value)) exception('非法参数');
    
    return str_angle($value);
}

这样的话.我们需要全角转半角时.就不需要满页面调用

str_angle();

函数了.直在刚接收POST.GET数据的函数里调用一次就行了.


说明:

input('post.'.$var);和 get_instance()->input->post($var);

其实跟我们原生$_POST['name']是一样的.

其他的可以自己去封一下.

TP5中使用上面的param时,如果接收数据什么的跟tp5里的input一样也是可以加修饰附的。

如接收数组时,可加:/a  修饰附。









另外附上check_param参数检测函数方法:

/**
* 参数安全判断
* @param: mixed $value 参数值
* @param: array $rules 检测规则
* return: boolean
*/
function check_param($value, $rules=''){
	$rules =  empty($rules) ? [1,2] : $rules;
	// 检测规则
	static $chars = [
		1 => "select|delete|update|insert|union|into|load_file|outfile",
		2 => "\'|\*|\\|\\$|\.\/",
		3 => "\'|\/|\*|\\|\\$|\.\/",
		4 => "\.",
	];

	$needChars = [];
	foreach($rules as  $one){
		if(isset($chars[$one])) $needChars[] = $chars[$one];
	}

	if(!empty($needChars)){
		if(is_array($value)){
			foreach($value as $val){
				$res = check_param($val,$rules);
				if(!$res){
					return false;
				}
			}
		}else{
			if(preg_match("/".implode("|",$needChars)."/i",$value)){
				return false;
			}
		}
	}
	return true;
}


 浏览器启用弹出窗口过滤功能,将无法跳转到下载页。在浏览器地址栏右边符号提示处点击允许就可以了!
查看演示   下载源码  
【温馨提示】源码包解压密码:www.youhutong.com
升级为VIP会员,有效期内免费下载本站所有VIP源码  点击升级为VIP

转载请注明来源地址:小川编程 » http://www.youhutong.com/index.php/article/index/29.html

( 1 )个小伙伴在吐槽
    登录帐号  如果已经登录请刷新! 发表我的评论
    表情