PHP截取中英文混合字元

來源:互聯網
上載者:User
////////////////////////////////////////////////////////////////////
// PHP截取中英文及標點符號混合的字串函數(絕對不會出現亂碼)
// 本程式在utf-8、gb2312中測試通過。使用者自行測試big5。
// 函數 left( 源字串, 截取指定的字串個數, 編碼(可省略,預設為utf-8) )
////////////////////////////////////////////////////////////////////

function left($str, $len, $charset="utf-8")
{
//如果截取長度小於等於0,則返回空
if( !is_numeric($len) or $len <= 0 )
{
return "";
}

//如果截取長度大於總字串長度,則直接返回當前字串
$sLen = strlen($str);
if( $len >= $sLen )
{
return $str;
}

//判斷使用什麼編碼,預設為utf-8
if ( strtolower($charset) == "utf-8" )
{
$len_step = 3; //如果是utf-8編碼,則中文字元長度為3
}else{
$len_step = 2; //如果是gb2312或big5編碼,則中文字元長度為2
}

//執行截取操作
$len_i = 0;
//初始化計數當前已截取的字串個數,此值為字串的個數值(非位元組數)
$substr_len = 0; //初始化應該要截取的總位元組數

for( $i=0; $i < $sLen; $i++ )
{
if ( $len_i >= $len ) break; //總截取$len個字串後,停止迴圈
//判斷,如果是中文字串,則當前總位元組數加上相應編碼的中文字元長度
if( ord(substr($str,$i,1)) > 0xa0 )
{
$i += $len_step - 1;
$substr_len += $len_step;
}else{ //否則,為英文字元,加1個位元組
$substr_len ++;
}
$len_i ++;
}
$result_str = substr($str,0,$substr_len );
return $result_str;
}

////////////////////////////////////////////////////////////////////
// 調用樣本
////////////////////////////////////////////////////////////////////
$str = "空格 也算一個字元";
echo "截取後的字串:".left($str,14);

?>
  • 聯繫我們

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