頂部導航開始 -->

插入數據庫之前的數據處理--過濾字符串中的特殊字符,過濾淘口令中的特殊字符

本文講述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;  
}



自學php博客
請先登陸后發表評論
  • 最新評論
  • 總共0條評論
  • ? 2014-2016 zixuephp.cn 版權所有
  • ICP證:皖ICP備16012107號
  • 聯系郵箱:[email protected]
  • 交流請加微信:weibobf2899 或掃下方二維碼
双大床红利扑克1手APP