Source: http://zhidao.baidu.com/question/282309749.html
Function Cutstr ( $ String , $ Length , $ Dot = '...', $ Charset = 'Utf-8 '){
// Function: truncates a string by length.
// $ String, $ length, $ dot, $ charset
// String, length, truncation, encoding
If ( Strlen ( $ String ) <= $ Length ){
Return $ String ;
}
$ String = Str_replace ( Array ('&', '"', '<', '> '), Array ('&', '"', '<', '> '), $ String );
$ Strcut = '';
If (Strtolower ( $ Charset ) = 'Utf-8 '){
$ N = $ TN = $ NOC = 0;
While ( $ N < Strlen ( $ String )){
$ T = ORD ( $ String [$ N ]);
If ( $ T = 9 | $ T = 10 | (32 <= $ T && $ T <= 126 )){
$ TN = 1;
$ N ++;
$ NOC ++;
} Elseif (194 <= $ T &&$ T <= 223 ){
$ TN = 2;
$ N + = 2;
$ NOC + = 2;
} Elseif (224 <= $ T && $ T <= 239 ){
$ TN = 3;
$ N + = 3;
$ NOC + = 2;
}Elseif (240 <= $ T && $ T <= 247 ){
$ TN = 4;
$ N + = 4;
$ NOC + = 2;
} Elseif (248 <= $ T && $ T <= 251 ){
$ TN = 5;
$ N + = 5;
$ NOC + = 2;
} Elseif ( $ T = 252 | $ T = 253 ){
$ TN = 6;
$ N + = 6;
$ NOC + = 2;
} Else {
$ N ++;
}
If ( $ NOC > = $ Length ){
Break ;
}
}
If ( $ NOC > $ Length ){
$ N -= $ TN ;
}
$ Strcut = Substr ( $ String , 0, $ N );
} Else {
For ( $ I = 0; $ I < $ Length ; $ I ++ ){
$ Strcut . = ORD ( $ String [ $ I ])> 127?$ String [ $ I ]. $ String [++ $ I ]: $ String [ $ I ];
}
}
$ Strcut = Str_replace ( Array ('&', '"', '<', '> '), Array ('&', '"', '<', '> '), $ Strcut );
Return $ Strcut . $ Dot ;
}
$ Str = "The string we want to intercept ";
Echo Cutstr ( $ Str , 15, "...", 'utf-8 ');