溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用substr截取UTF-8中文字符串時出現(xiàn)亂碼如何解決

發(fā)布時間:2020-12-30 14:57:51 來源:億速云 閱讀:386 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)使用substr截取UTF-8中文字符串時出現(xiàn)亂碼如何解決,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

看這樣一段代碼吧(字符編碼為UTF-8):

復(fù)制代碼 代碼如下:


<?
$str = '都知道strlen與mb_strlen是求字符串長度的函數(shù)';
echo strlen($str)'.<br />'.mb_strlen($str,'utf-8');
?>


運行上述代碼,返回值如下:
66
34
怎么樣?strlen中,中文是三個字節(jié)的長度,英文則是一個字節(jié)的長度!mb_strlen中,都被計算為一字節(jié)的長度!所以,我們有時候用substr來截取UTF-8中文字符串的時候,經(jīng)常會出現(xiàn)亂碼,就是這個原因了!
下面提供一個截取UTF-8字符串的函數(shù):

復(fù)制代碼 代碼如下:


function cutstr($sourcestr,$cutlength){
$returnstr = '';
$i = 0;
$n = 0;
$str_length = strlen($sourcestr);
$mb_str_length = mb_strlen($sourcestr,'utf-8');
while(($n < $cutlength) && ($i <= $str_length)){
$temp_str = substr($sourcestr,$i,1);
$ascnum = ord($temp_str);
if($ascnum >= 224){
$returnstr = $returnstr.substr($sourcestr,$i,3);
$i = $i + 3;
$n++;
}
elseif($ascnum >= 192){
$returnstr = $returnstr.substr($sourcestr,$i,2);
$i = $i + 2;
$n++;
}
elseif(($ascnum >= 65) && ($ascnum <= 90)){
$returnstr = $returnstr.substr($sourcestr,$i,1);
$i = $i + 1;
$n++;
}
else{
$returnstr = $returnstr.substr($sourcestr,$i,1);
$i = $i + 1;
$n = $n + 0.5;
}
}
if ($mb_str_length > $cutlength){
$returnstr = $returnstr . "...";
}
return $returnstr;
}


使用例子:

復(fù)制代碼 代碼如下:


<?
$str = '有效期最長三個月,超過有效期系統(tǒng)將自動刪除本條信息';
//echo strlen($str);
//echo '<hr />'.mb_strlen($str,'utf-8');
echo '<hr />'.$str;
echo '<hr />'.cutstr($str,24);
?>

以上就是使用substr截取UTF-8中文字符串時出現(xiàn)亂碼如何解決,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI