php 截取字串函數(支援中文與不同編碼)

來源:互聯網
上載者:User

//字串截取函數一

 代碼如下 複製代碼

function mystr($str,$str_len) {//剪取一定長度的字串(字串,剪取長度)
     if (strlen($str)<=$str_len) {
         return $str;
     }else return mysubstr($str,0,$str_len)."...";
}
function mysubstr($str, $start, $len) {//剪取一定長度的字串(字串,剪取長度)
     $tmps教程tr = "";
     $strlen = $start + $len;
     for($i = 0; $i < $strlen; $i++) {
         if(ord(substr($str, $i, 1)) > 0xa0) {
             $tmpstr .= substr($str, $i, 2);
             $i++;
         } else
         $tmpstr .= substr($str, $i, 1);
     }
     return $tmpstr;
}

//字元截取函數二

 代碼如下 複製代碼

function syssubstr($string,$length,$append = false)
{
if (strlen($string) < = $length )
{
return $string;
}
else
{
$i = 0;
while ($i < $length)
{
$stringtmp = substr($string,$i,1);
if ( ord($stringtmp) >=224 )
{
$stringtmp = substr($string,$i,3);
$i = $i + 3;
}
elseif( ord($stringtmp) >=192 )
{
$stringtmp = substr($string,$i,2);
$i = $i + 2;
}
else
{
$i = $i + 1;
}
$stringlast[] = $stringtmp;
}
$stringlast = implode("",$stringlast);
if($append)
{
$stringlast .= "...";
}
return $stringlast;
}
}

$string = "";
$length = "18";
$append = false;
echo syssubstr($string,$length,$append);


// utf-8:$byte=3 | gb 2312:$byte=2 | big5:$byte=2

 代碼如下 複製代碼

function bite_str($string, $start, $len, $byte=3)
{
     $str     = "";
     $count   = 1;
     $str_len = strlen($string);
     for ($i=0; $i<$str_len; $i++) {
         if (($count+1-$start)>$len) {
             $str   .= "...";
             break;
         } elseif ((ord(substr($string,$i,1)) <= 128) && ($count < $start)) {
             $count++;
         } elseif ((ord(substr($string,$i,1)) > 128) && ($count < $start)) {
             $count = $count+2;
             $i     = $i+$byte-1;
         } elseif ((ord(substr($string,$i,1)) <= 128) && ($count >= $start)) {
             $str   .= substr($string,$i,1);
             $count++;
         } elseif ((ord(substr($string,$i,1)) > 128) && ($count >= $start)) {
             $str   .= substr($string,$i,$byte);
             $count = $count+2;
             $i     = $i+$byte-1;
         }
     }
     return $str;
}

// test
$str = "1測試測試2測試測試3測試測試4測試測試";
echo $str;
echo "<br>".bite_str($str,0,20,2);//0為開始地址,20為結束位址2為類型上面說到的

//方法四,支援中英文字串截取函數

 代碼如下 複製代碼

function ccstrlen($str) #計算中英文混合字串的長度
{
$cclen=0;
$asclen=strlen($str);
$ind=0;
$hascc=ereg("[xa1-xfe]",$str); #判斷是否有漢字
$hasasc=ereg("[x01-xa0]",$str); #判斷是否有ascii字元
if($hascc && !$hasasc) #只有漢字的情況
return strlen($str)/2;
if(!$hascc && $hasasc) #只有ascii字元的情況
return strlen($str);
for($ind=0;$ind<$asclen;$ind++)
{
if(ord(substr($str,$ind,1))>0xa0)
{
$cclen++;
$ind++;
}
else
{
$cclen++;
}
}
return $cclen;
}

聯繫我們

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