php substr截斷漢字亂碼解決辦法
來源:程序員人生 發布時間:2014-04-08 23:51:24 閱讀次數:2954次
在php中substr是用來截取字符的,但是有朋友會發現把它來截英文字母是沒有任何問題,但是如果截中文時會出現半個漢字亂碼了,下面我來介紹一些解決辦法.
substr() 函數返回字符串的一部分。
語法:substr(string,start,length)
實例代碼如下:
- <?php
- echo substr("Hello world!",6);
- ?>
輸出 world!
實例代碼如下:echo substr('中國文',1);
結果就是籌碼了,后來才知道中文與英文的區別在于內編碼了,一個網站這樣說到substr函數在截取字符時是按字節來截取的,中文字符在GB2312編碼時為2個字節,utf-8編碼時為3個字節,所以截取指定長度的字符串時如果截斷了漢字,那么返回的結果顯示出來便會出現亂碼.
解決辦法:1、利用mb_substr來截取,代碼如下:
- <?php
- $str = '這樣一來我的字符串就不會有亂碼^_^';
- echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8');
-
- echo "<br>";
- echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8');
-
- ?>
但是如果要使用mb_substr截取我們需要使用使用mbstring擴展庫,如果沒有權限的朋友我們就可參考下面函數,代碼如下:
- function msubstr($str, $start, $len) {
- $tmpstr = "";
- $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;
- }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈