国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

解析使用substr截取UTF-8中文字符串出現亂碼的問題

2024-05-04 23:10:47
字體:
來源:轉載
供稿:網友
我們知道有時候使用substr來截取UTF-8中文字符串的時候,經常會出現亂碼,為什么會出現這樣的問題呢,本文告訴你答案。
看這樣一段代碼吧(字符編碼為UTF-8):

復制代碼 代碼如下:


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


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

復制代碼 代碼如下:


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;
}


使用例子:

復制代碼 代碼如下:


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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 禹州市| 巴东县| 正蓝旗| 扶沟县| 乐陵市| 承德市| 扶余县| 武平县| 淅川县| 天长市| 新竹市| 稷山县| 南宫市| 高台县| 环江| 宁强县| 谷城县| 孟州市| 油尖旺区| 广元市| 福安市| 宜都市| 望谟县| 皋兰县| 临汾市| 常德市| 灌阳县| 淳化县| 漳州市| 新乐市| 江城| 波密县| 沙坪坝区| 清水河县| 扶绥县| 舟曲县| 芮城县| 舟曲县| 衡南县| 淮安市| 沛县|