把字符串中含有的全角字符.全部转换为半角字符.
如果可以的话最接收表单数据时.我们可以封装一个接收表单数据公用函数.然后直接在里面调用我们的全角转半角方法函数就行了.
下面代码奉上!
有问题可以留言交流.一起学习.
一:把字符串中含有全角的全部转换成对应半角字符方法代码:
/** * 全角字符转换为半角字符 * 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; }
转载请注明来源地址:小川编程 » https://www.youhutong.com/index.php/article/index/29.html
1、本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,下载后请24小时内删除。
2、本站所有内容均不能保证其完整性,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用
3、本站联系方式Email:admin@youhutong.com ,收到邮件会第一时间处理。
4、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意