乙個比較好用的字串擷取函式:
function substring($str, $start, $length)
$len= ($len < strlen($str)) ? $len : strlen($str);
$tmpstr = "";
for ($i= $start; $i < $len; $i ++)
else
} if($length < 0) $tmpstr = strrev($tmpstr);
return $tmpstr;
}使用方法示例:
$str1 = '我是一串比較長的中文不帶英文';
$str2 = '我是一串比較長的中文帶yingwen';
$len = strlen($str1);
echo '
'.$len; //return 28
$len = strlen($str2);
echo '
'.$len; //return 29
echo '
';
echo substring($str1, 0, 11);
echo '
';echo substring($str2, 0, 11);
echo '
';echo substring($str1, 16, 28);
echo '
';echo substring($str2, 16, 29);
結果顯示:
2829
我是一串比較
我是一串比較
中文不帶英文
中文帶yingwen
這個函式十分有用,比如用來截斷比較長的檔名,但是要在中間加上...,可以這樣來做:
function formatname($str, $size) else
}另外,網上看到一種超級簡單的中文截斷解決方案,試用了一下,效果也不錯:
echo substr($str1,0,10).chr(0);
原理解釋:
chr(0)不是null
07null是什麼都沒有,而chr(0)的值是0。表示成16進製制是0x00,表示成二進位制是00000000
08雖然chr(0)不會顯示znbyc出什麼,但是他是乙個字元。
09當漢字被截斷時,根據編碼規則他總是要把後邊的其他字元拉過來一起作為漢字解釋,這就是出現亂碼的原因。而值為0x81到0xff與0x00組合始終都顯示為「空」
10根據這一特點,在substr的結果後面補上乙個chr(0),就可以防止出現亂碼了
----------------------------
20120705更新:
以上方法雖好,但是偶爾還是會碰到亂碼,原因未深究。不過可以用以下的方法,對utf8字元文字屢試不爽。
注意:該方法中將漢字計算為1單位長度,英文乙個字母1單位長度,所以截斷時需要注意長度設定。
計算長度的方法:
function strlen_utf8($str)
elseif (substr($a, 0, 3) == 110) elseif (substr($a, 0, 4) == 1110)
程式設計客棧$n++;
} return $n;www.cppcns.com
} // end strlen_utf8;
字串截斷函式:
function substring_utf8($str, $start, $lenth)
elseif (substr($a, 0, 3) == 110) elseif (substr($a, 0, 4) == 1110)
$n++;
}elseelseif (substr($a, 0, 3) == 110) elseif (substr($a, 0, 4) == 1110) else
if (++$m >= $lenth)}}
return join($r);
} // end substring_utf8;
使用方法和之前介紹的一樣,比如formatname可以實現如下(這對漢字長度做了小優化):
function formatname($str, $size) else
}本文標題: php中文字串截斷無亂碼解決方法
本文位址:
PHP實現中文字元的無亂碼截斷
php內建的substr 函式不能對中文字元進行很好的截斷處理,對於一些中英文混合的字元會出現亂碼的情況。下面提供兩種解決函式。1 gb2312編碼方式的截斷 php function msubstr str,start,len else tmpstr substr str,i,1 return t...
PHP實現中文字元的無亂碼截斷
php 內建的substr 函式不能對中文字元進行很好的截斷處理,對於一些中英文混合的字元會出現亂碼的情況。下面提供兩種解決函式。1 gb2312編碼方式的截斷 functionmsubstr str,start,len else return tmpstr.2 utf8格式下的中文字元截斷 utf...
php使用iconv中文截斷問題的解決方法
今天做了乙個採集程式,原理很簡單,使用curl方法把對方頁面的html獲取分析,然後正則提取需要的資料並儲存在資料庫。由於對方頁面是gb2312編碼,而本地使用的是utf 8編碼。因此在採集後需要進行編碼轉換。使用了iconv方法進行編碼轉換 iconv 字串按要求的字元編碼來轉換 n程式設計客棧b...