本文讲述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;
}
宠物免费领养小程序,欢迎来踩