php中文字符串截取亂碼問題解決


其實下面的方法1、2現在不推薦了,讀者們看了就當多了解了吧,網友有留言,其實php有現成的用於多字節安全的字符串截取函數的mb_substr,

參照:http://www.php.net/manual/zh/function.mb-substr.php

http://baike.baidu.com/view/4517800.htm

方法1、字符串編碼為UTF-8的,一個中文字符占三個字節:

    public static function chinesesubstr($str, $start, $len) { // $str指字符串,$start指字符串的起始位置,$len指字符串長度
        $strlen = $start + $len; // 用$strlen存儲字符串的總長度,即從字符串的起始位置到字符串的總長度
        for($i = $start; $i < $strlen;) {
            if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) { // 如果字符串中首個字節的ASCII序數值大於0xa0,則表示漢字
                $tmpstr .= substr ( $str, $i, 3 ); // 每次取出三位字符賦給變量$tmpstr,即等於一個漢字
                $i=$i+3; // 變量自加3
            } else{
                $tmpstr .= substr ( $str, $i, 1 ); // 如果不是漢字,則每次取出一位字符賦給變量$tmpstr
                $i++;
            }
        }
        return $tmpstr; // 返回字符串
    }

方法2、字符串編碼為GB2312的,一個中文字符占兩個字節:

    public static function chinesesubstr($str, $start, $len) { // $str指字符串,$start指字符串的起始位置,$len指字符串長度
        $strlen = $start + $len; // 用$strlen存儲字符串的總長度,即從字符串的起始位置到字符串的總長度
        for($i = $start; $i < $strlen;) {
            if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) { // 如果字符串中首個字節的ASCII序數值大於0xa0,則表示漢字
                $tmpstr .= substr ( $str, $i, 2 ); // 每次取出兩位字符賦給變量$tmpstr,即等於一個漢字
                $i=$i+2; // 變量自加2
            } else{
                $tmpstr .= substr ( $str, $i, 1 ); // 如果不是漢字,則每次取出一位字符賦給變量$tmpstr
                $i++;
            }
        }
        return $tmpstr; // 返回字符串
    }

 

 推薦一個自己業余時間開發的網盤搜索引擎,360盤搜www.360panso.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM