其實下面的方法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; // 返回字串 }