PHP截取中英文混合字符


<?php

////////////////////////////////////////////////////////////////////
// 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); 

?>                                    
  
  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM