本文讲述php过滤特殊字符,比如淘宝淘口令中带有手型符号的时候,存储到数据库的时候,发现符号开始之后的内容都没法存储到mysql数据库中,本文介绍的方法就是对特殊字符处理,将特殊字符过滤掉,然后将内容保存到数据库中。
由于工作中需要使用到淘宝的淘口令,但是在添加淘口令的时候,发现iphone6从淘宝复制的淘口令会带有特殊符号,如下图:
在实际项目中,从页面的文本框提交的数据,可以正常的提交带有特殊字符的内容,而且php接收到的内容也是正常的带有特使字符的,但是在添加数据库的时候,就会发现,能够添加到数据库中的内容却只保存了手型符号之前的内容,如下如所示:
从iphone6复制的淘口令带有特殊字符,所以保存到数据库中的内容是:'复制这条信息,打开',二之后的内容都没能添加到数据库中。
我这边采用的解决办法是自定义了一个函数,在接收到前台传递的淘口令之后,首先调用自定义函数,对淘口令进行过滤,过滤的规则是根据字符的编码来进行的,将淘口令中的不属于urt-8的字符过滤掉,如此就可以获取到不包含特殊字符的淘口令了。
自定义过滤非utf-8字符的函数如下:
/** 過濾字符串,保留UTF8字母數字中文及部份符號 * @param String $ostr * @return String */ function filter_utf8_char($ostr){ preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $ostr, $matches); $str = join('', $matches[0]); if($str==''){ //含有特殊字符需要逐個處理 $returnstr = ''; $i = 0; $str_length = strlen($ostr); while ($i=224){ $returnstr = $returnstr.substr($ostr, $i, 3); $i = $i + 3; }elseif ($ascnum>=192){ $returnstr = $returnstr.substr($ostr, $i, 2); $i = $i + 2; }elseif ($ascnum>=65 && $ascnum=128 && $ascnum<=191){ // 特殊字符 $i = $i + 1; }else{ $returnstr = $returnstr.substr($ostr, $i, 1); $i = $i + 1; } } $str = $returnstr; preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $str, $matches); $str = join('', $matches[0]); } return $str; }
宠物免费领养小程序,欢迎来踩