先說明:網上目前有很多這個問題的代碼,但是很多都是復制粘貼,沒有自己實踐,而且代碼有邏輯問題,下面的代碼由我自己編寫。
話不多說
代碼如下復制代碼
/**
* 該函數是對於utf8編碼
* @author [email protected]
* @param string $str
* @param int $start
* @param int $length
* @return string
* @copyright 2017年2月27日下午1:46:10
*/
functiongbsubstr2($str,$start,$length) {
$length=abs($length);
$strLen=strlen($str);
$len=$start+$length;
$newStr=''
for($i=$start;$i<$len&&$i<$strLen;$i++) {
if(ord(substr($str,$i, 1)) > 0xa0) {
//utf8編碼中一個漢字是占據3個字節的,對於其他的編碼的字符串,中文占據的字節各有不同,自己需要去修改這個數a
$newStr.=substr($str,$i, 3);//此處a=3;
$i+=2;
$len+= 2;//截取了三個字節之後,截取字符串的終止偏移量也要隨著每次漢字的截取增加a-1;
}else{
$newStr.=substr($str,$i, 1);
}
}
return$newStr;
}