摘要:如果直接使用substr截取中文字符串肯定會(huì)出亂碼的,因?yàn)樗麜?huì)把一個(gè)漢字分成一半,為什么會(huì)這樣,因?yàn)闄C(jī)器內(nèi)部編碼的問題,現(xiàn)在我們來看處理辦法1、使用mbstring擴(kuò)展庫的mb_substr截取就不會(huì)出現(xiàn)亂碼了...
轉(zhuǎn)載請(qǐng)注明來源:php substr中文亂碼解決辦法

如果直接使用substr截取中文字符串肯定會(huì)出亂碼的,因?yàn)樗麜?huì)把一個(gè)漢字分成一半,為什么會(huì)這樣,因?yàn)闄C(jī)器內(nèi)部編碼的問題,現(xiàn)在我們來看處理辦法

1、使用mbstring擴(kuò)展庫的mb_substr截取就不會(huì)出現(xiàn)亂碼了。

2、自己書寫截取函數(shù),但效率不如用mbstring擴(kuò)展庫來得高。

3、如果僅是為了輸出截取的串,可用如下方式實(shí)現(xiàn):substr($str, 0, 30).chr(0).

PHP實(shí)例代碼如下:

  1.  * 可以避免亂碼的截取漢字 
  2.  * 參數(shù) $str 為字符串,$start 為開始字符,$len 結(jié)束字符 
  3.  * 返回截取后的字符 
  4.  */ 
  5. function msubstr($str$start$len) {  
  6.  $tmpstr = "";//開源代碼phpfensi.com 
  7.  $strlen = $start + $len;  
  8.  for($i = 0; $i < $strlen$i++) {  
  9.   if(ord(substr($str$i, 1)) > 0xa0) {  
  10.    $tmpstr .= substr($str$i, 2);  
  11.    $i++;  
  12.   } else  
  13.    $tmpstr .= substr($str$i, 1);  
  14.  }  
  15.  return $tmpstr;  

方法二,php實(shí)現(xiàn)中文字串截取無亂碼的方法,代碼如下:

  1. function gbsubstr($string$start$length) { 
  2. if(strlen($string)>$length){ 
  3.    $str=null; 
  4.    $len=$start+$length
  5.    for($i=$start;$i<$len;$i++){ 
  6.     if(ord(substr($string,$i,1))>0xa0){ 
  7.      $str.=substr($string,$i,2); 
  8.      $i++; 
  9.     }else
  10.      $str.=substr($string,$i,1); 
  11.     } 
  12.    } 
  13.    return $str.'...'
  14. }else
  15.    return $string
  16. ?> 
轉(zhuǎn)載請(qǐng)注明來源:php substr中文亂碼解決辦法

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無需額外費(fèi)用,即可穩(wěn)步提升排名至首頁。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)。