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