自定义mb_substr
//将字符串以单个汉字切成数组 ,返回数组。
public function myStrtoArray($str,$charset){
$charsets["utf-8"] = $charsets["utf8"] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$charsets["gb2312"] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$charsets["gbk"] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$charsets["big5"] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($charsets[$charset], $str, $matches); #按照指定编码将字符串切分成一个数组
return $matches[0];
}
/**
* 计算中文字符的长度,返回长度(int);
*/
public function myMbStrlen($str, $charset='utf-8'){
$matches = $this->myStrtoArray($str,$charset);
return count($matches);
}
/**
* 中文字串的截取,返回截取后的字符串(string)。
*/
public function myMbSubstr($str,$start,$length,$charset='utf-8'){
$matches = $this->myStrtoArray($str,$charset);
$substr = implode("", array_slice($matches, $start, $length)); #获取数组的子数组,并将子数组的元素连接起来3
return $substr;
}