PHP中UTF8中文字元截斷程式碼

來源:互聯網
上載者:User

最簡單的字元截取函數是用php內建的substr()

其實,PHP原生就有多charset下字元截取方案,額,所以就是這個樣子...??.

Multibyte String Functions函數族中,


string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )  用來字串截取

int mb_strlen ( string $str [, string $encoding ] )  返回字串長度

但它只支援數字與字母不支援中文

執行個體

UTF8中文字元截斷

 代碼如下 複製代碼
<?php
 /* UTF-8中文字元截斷程式 */
 
 
 $str = "123這是測試字串";
 $str1 = "()()";
 echo subUTF8str($str,0,3)."<br>";
 echo subUTF8str($str,0,4)."<br>";
 echo subUTF8str($str1,0,4)."<br>";
 echo subUTF8str($str1,0,10)."<br>";
 
 function subUTF8str($str,$start=0,$length=80){
    $cur_len = 0; //人理解的字串長度
    $all_len = strlen($str); //機器理解字串長度
    if($length > $all_len)
    {
         return $str;
    }
    for($i = 0;$i < $all_len;)
    {
         if($cur_len == $start)
         {
             break;
         }
         if (ord($str[$i]) > 127)
         {
             $i += 3;
         }else{
             $i += 1;
         }
         $cur_len ++;
    }
     $start_pos = $i;
     $temp_pos = $cur_len;
     for(;$cur_len - $temp_pos < $length;)
     {
         if($i >= $all_len)
             break;
         if (ord($str[$i]) > 127)
         {
             $i += 3;
         }else{
             $i += 1;
         }
         $cur_len ++;
     }
     $end_pos = $i;
     return substr($str,$start_pos,$end_pos);
 }
 ?>

改進後我們把它分頁,這樣可支援ut8與gbk等中文字元截取

 代碼如下 複製代碼

function substrs($content, $length){
 if($length && strlen($content)>$length){
  if($db_charset!='utf-8'){
   $retstr='';
   for($i = 0; $i < $length - 2; $i++) {
    $retstr .= ord($content[$i]) > 127 ? $content[$i].$content[++$i] : $content[$i];
   }
   return $retstr;
  }else{
   return utf8_trim(substr($content,0,$length*3));
  }
 }
 return $content;
}

function utf8_trim($str) {
 $len = strlen($str);
 for($i=strlen($str)-1;$i>=0;$i-=1){
  $hex .= ' '.ord($str[$i]);
  $ch   = ord($str[$i]);
  if(($ch & 128)==0) return substr($str,0,$i);
  if(($ch & 192)==192)return substr($str,0,$i);
 }
 return($str.$hex);
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.