雖然PHP有現成的截取字串函數substr(),但是這個函數不能對漢字字串進行截取,要實現這種效果還需要我們自己去編寫相應的函數。漢字有多種編碼,比如GB2312,UTF-8等,漢字字串的截取需要區分這種漢字編碼,下面是給出的幾個解決方案。
截取GB2312中文字串
0xa0) { $tmpstr .= substr($str, $i, 2); $i++; } else $tmpstr .= substr($str, $i, 1); } return $tmpstr;}?>
截取utf8編碼的多位元組字串
UTF-8、GB2312都支援的漢字截取函數
$sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; return join('', array_slice($t_string[0], $start, $sublen)); } else { $start = $start*2; $sublen = $sublen*2; $strlen = strlen($string); $tmpstr = ''; for($i=0; $i<$strlen; $i++) { if($i>=$start && $i<($start+$sublen)) { if(ord(substr($string, $i, 1))>129) { $tmpstr.= substr($string, $i, 2); } else { $tmpstr.= substr($string, $i, 1); } } if(ord(substr($string, $i, 1))>129) $i++; } if(strlen($tmpstr)<$strlen ) $tmpstr.= "..."; return $tmpstr; }}$str = "abcd需要截取的字串";echo cut_str($str, 8, 0, 'gb2312');?>
BugFree 的字元截取函數
* @param string $String the string to cut.* @param int $Length the length of returned string.* @param booble $Append whether append "...": false|true* @return string the cutted string.*/function sysSubStr($String,$Length,$Append = false){ if (strlen($String) <= $Length ) { return $String; } else { $I = 0; while ($I < $Length) { $StringTMP = substr($String,$I,1); if ( ord($StringTMP) >=224 ) { $StringTMP = substr($String,$I,3); $I = $I + 3; } elseif( ord($StringTMP) >=192 ) { $StringTMP = substr($String,$I,2); $I = $I + 2; } else { $I = $I + 1; } $StringLast[] = $StringTMP; } $StringLast = implode("",$StringLast); if($Append) { $StringLast .= "..."; } return $StringLast; }}$String = "www.bkjia.com";$Length = "18";$Append = false;echo sysSubStr($String,$Length,$Append);?>
http://www.bkjia.com/PHPjc/752427.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/752427.htmlTechArticle雖然PHP有現成的截取字串函數substr(),但是這個函數不能對漢字字串進行截取,要實現這種效果還需要我們自己去編寫相應的函數。漢...