如果直接使用substr截取中文字符串肯定會出亂碼的,因為他會把一個漢字分成一半,為什么會這樣,因為機器內(nèi)部編碼的問題,現(xiàn)在我們來看處理辦法
1、使用mbstring擴展庫的mb_substr截取就不會出現(xiàn)亂碼了。
2、自己書寫截取函數(shù),但效率不如用mbstring擴展庫來得高。
3、如果僅是為了輸出截取的串,可用如下方式實現(xiàn):substr($str, 0, 30).chr(0).
PHP實例代碼如下:
- * 可以避免亂碼的截取漢字
- * 參數(shù) $str 為字符串,$start 為開始字符,$len 結(jié)束字符
- * 返回截取后的字符
- */
- function msubstr($str, $start, $len) {
- $tmpstr = "";//開源代碼Vevb.com
- $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;
- }
方法二,php實現(xiàn)中文字串截取無亂碼的方法,代碼如下:
- function gbsubstr($string, $start, $length) {
- if(strlen($string)>$length){
- $str=null;
- $len=$start+$length;
- for($i=$start;$i<$len;$i++){
- if(ord(substr($string,$i,1))>0xa0){
- $str.=substr($string,$i,2);
- $i++;
- }else{
- $str.=substr($string,$i,1);
- }
- }
- return $str.'...';
- }else{
- return $string;
- }
- }
- ?>
新聞熱點
疑難解答