其實下面的方法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)