首頁  >  文章  >  後端開發  >  php中文字串截取 php截取中文字串的程式碼

php中文字串截取 php截取中文字串的程式碼

巴扎黑
巴扎黑原創
2016-11-22 15:58:26885瀏覽

php截取中文字串,一般就是根據值是否大於等於128來判斷是否是雙字節字符,以避免出現截取不全與亂碼的情況。 
不過,遇到中英文混合、特殊符號也包含其中的情況時,問題就沒那麼容易解決了。 

以下是一個全面解決中文字串截取問題的函數,有需要的朋友可以參考下。

說明: 
1、len 參數以中文字符為標準,1len等於2個英文字符,為了形式上好看些 
2、如果將magic參數設為false,則中文和英文同等看待,取絕對的字符數
3、特別適用於用htmlspecialchars()進行過編碼的字串 
4、能正確處理GB2312中實體字元模式(??) 

範例: 
/** 
  @移除中文字串 適用於GB2312編碼 
  @http://www.jbxue.com 
unc/ FSubstr($title,$start,$len="",$magic=true) 

$length = 0; 
if($len == "") $len = strlen($title); 

///判斷起始為不正確位置 
if($start > 0) 

$cnum = 0; 
for($i=0;$i{ 
if(ord(substr(pstr title,$i,1)) >= 128) $cnum ++; 

if($cnum%2 != 0) $start--; 

unset($cnum); 


unset($cnum); 

if( ($title)
$alen = 0; 
$blen = 0; 

$realnum = 0; 

for($i=$ start;$i
$ctype = 0; 
$cstep = 0; 
$cur = substr($title,$i,1); 
if($cur == "&") 

if(substr($title,$i,4) == "{ 
$cstep = 4; 
$lengoo ++; 
if($magic) 

$alen ++; 


else if(substr($title,$i,4) == ">") 
{ $length += 4; 
$i += 3; 
$realnum ++; 
if($magic) 

$alen ++; 


$alen ++; 


$alen ++; 


) == "&") 

$cstep = 5; 
$length += 5; 
$i += 4; 
$realnum ++; 
if($magic) 


else if(substr($title,$i,6) == """) 

$cstep = 6; 
$leng  6; 
$i += 5; ; 
if($magic) 

$alen ++; 


else if(substr($title,$i,6) == "'") 
{ += 6; 
$i += 5; 
$realnum ++; 
if($magic) 

$alen ++; 


$alen ++; 


else if(preg_match( i",substr($title,$i,8),$match)) 

$cstep = strlen($match[0]); 
$length += strlen($match[0]); 
$i += strlen($match[0])-1; 
$realnum ++; 
if($magic) 

$blen ++; 
$ctype = 1; 


} ord($cur)>=128) 

$cstep = 2; 
$length += 2; 
$i += 1; 
$realnum ++; 
if($i += 1; 
$realnum ++; 
if($ ; 
$ctype = 1; 

}else{ 
$cstep = 1; 
$length +=1; 
$realnum ++; 
if($magic)

if($magic) 

if(($blen*2+$alen) == ($len*2)) break; 
if(($blen*2+$alen) == ($len* 2+1)) 

if($ctype == 1) 

$length -= $cstep; 
break; 
}else{ 
break> = $len) break; 



unset($cur); 
unset($alen); 
unset($blen); 
unset($realnum); 
unset($blen); 
unset($realnum); 
cstep); 

return substr($title,$start,$length); 

?> 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:二維數組排序下一篇:二維數組排序