PHP 字串編碼截取函數(相容utf-8和gb2312)

來源:互聯網
上載者:User

複製代碼 代碼如下://截取字串長度。支援utf-8和gb2312編碼。若為gb2312,先將其轉為utf-8,在utf-8的基礎上截取然後再轉換回來
function cut_string($str,$from=1,$length=10,$code='utf-8',$rear='...'){
if($code!='utf-8'){//總是將字串轉為utf-8編碼
$str=iconv($code,'utf-8',$str);
}
$str_len=mb_strlen($str,'utf-8');//字串的長度
if($from>$str_len){//如果截取開始位置大於字串長度,截取後面$length個
$from=$str_len-$length+1;
$from=($from<1?1:$from);
}
//相容ucs-4編碼
$i=0;//位元組計數
$from_i=0;//開始截取的位元組位置
$from_len=0;//開始截取的字元位置
$tag=true;//標誌$from_len是否已經被賦值
for($temp_len=0;($temp_len-$from_len<$length)||$tag;$temp_len++){
$byte_code=ord(substr($str,$i,1));//一個位元組的編碼
if($temp_len+1==$from){//記錄開始截取的開始位元組位置
$from_i=$i;$from_len=$temp_len;$tag=false;
}
if($byte_code>=0&&$byte_code<128){//字元是佔用幾個位元組,utf-8是變長編碼,根據每個字元的第一個位元組可判斷出該字元占幾個位元組
$i++;
}
if($byte_code>191&&$byte_code<224){
$i+=2;
}
if($byte_code>223&&$byte_code<240){
$i+=3;
}
if($byte_code>239&&$byte_code<248){
$i+=4;
}
if($byte_code>248&&$byte_code<252){
$i+=5;
}
if($byte_code>252&&$byte_code<255){
$i+=6;
}
}
return iconv('utf-8',$code,substr($str,$from_i,$i-$from_i).$rear);
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.