插入数据库之前的数据处理--过滤字符串中的特殊字符,过滤淘口令中的特殊字符

php php 1773      收藏
本文讲述php过滤特殊字符,比如淘宝淘口令中带有手型符号的时候,存储到数据库的时候,发现符号开始之后的内容都没法存储到mysql数据库中,本文介绍的方法就是对特殊字符处理,将特殊字符过滤掉,然后将内容保存到数据库中。

本文讲述php过滤特殊字符,比如淘宝淘口令中带有手型符号的时候,存储到数据库的时候,发现符号开始之后的内容都没法存储到mysql数据库中,本文介绍的方法就是对特殊字符处理,将特殊字符过滤掉,然后将内容保存到数据库中。

由于工作中需要使用到淘宝的淘口令,但是在添加淘口令的时候,发现iphone6从淘宝复制的淘口令会带有特殊符号,如下图:

自学php博客

在实际项目中,从页面的文本框提交的数据,可以正常的提交带有特殊字符的内容,而且php接收到的内容也是正常的带有特使字符的,但是在添加数据库的时候,就会发现,能够添加到数据库中的内容却只保存了手型符号之前的内容,如下如所示:

自学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;  
}