Function cut_str ($ string, $ sublen, $ start = 0, $ code = 'utf-8 ') { If ($ code = 'utf-8 ') { $ Pa = "/[x01-x7f] | [xc2-xdf] [x80-xbf] | xe0 [xa0-xbf] [x80-xbf] | [xe1-xef] [x80-xbf] [x80-xbf] | xf0 [x90-xbf] [x80-xbf]] [x80-xbf] | [xf1-xf7] [x80-xbf] [x80-xbf] [x80-xbf]/"; Preg_match_all ($ pa, $ string, $ t_string ); If (count ($ t_string [0])-$ start> $ 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 = "the string to be intercepted by abcd "; Echo cut_str ($ str, 8, 0, 'gb2312 '); ?> |