<?php //////////////////////////////////////////////////////////////////// // PHP截取中英文及標點符號混合的字符串函數(絕對不會出現亂碼) // 本程序在utf-八、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 = "空格qv80 也算一個字符"; echo "截取後的字符串:".left($str,7); ?> php