Smart Chinese characters (utf8 and gb2312)
UTF-8 encoding. a Chinese character occupies three bytes:
Php code:
Gb2312 encoding. a Chinese character occupies two bytes:
Php code:
Function smarty_modifier_cntruncate ($ string, $ strlen = 20, $ etc = '...', $ keep_first_style = false)
{
$ Strlen = $ strlen * 2;
$ String = trim ($ string );
If (strlen ($ string) <= $ strlen ){
Return $ string;
}
$ Str = strip_tags ($ string );
$ J = 0;
For ($ I = 0; $ I <$ strlen; $ I ++ ){
If (ord (substr ($ str, $ I, 1)> 0xa0) $ j ++;
}
If ($ j % 2! = 0) $ strlen ++;
$ Rstr = substr ($ str, 0, $ strlen );
If (strlen ($ str)> $ strlen) {$ rstr. = $ etc ;}
If ($ keep_first_style = true & ereg ('^ <(. *) >$', $ string )){
If (strlen ($ str) <= $ strlen ){
Return $ string;
}
$ Start_pos = strpos ($ string, substr ($ str, 0, 4 ));
$ End_pos = strpos ($ string, substr ($ str,-4 ));
$ End_pos = $ end_pos + 4;
$ Rstr = substr ($ string, 0, $ start_pos). $ rstr. substr ($ string, $ end_pos, strlen ($ string ));
}
Return $ rstr;
}
Function smarty_modifier_cntruncate ($ string, $ strlen = 20, $ etc = '...', $ keep_first_style = false)
{
$ Strlen = $ strlen * 3;
$ String = trim ($ string );
If (strlen ($ string) <= $ strlen ){
Return $ string;
}
$ Str = strip_tags ($ string );
$ J = 0;
For ($ I = 0; $ I <$ strlen; $ I ++ ){
If (ord (substr ($ str, $ I, 1)> 0xa0) {$ I + = 2; $ j + = 3 ;}
Else {$ j ++ ;}
}
$ Rstr = substr ($ str, 0, $ j );
If (strlen ($ str)> $ strlen) {$ rstr. = $ etc ;}
If ($ keep_first_style = true & ereg ('^ <(. *) >$', $ string )){
If (strlen ($ str) <= $ strlen ){
Return $ string;
}
$ Start_pos = strpos ($ string, substr ($ str, 0, 4 ));
$ End_pos = strpos ($ string, substr ($ str,-4 ));
$ End_pos = $ end_pos + 4;
$ Rstr = substr ($ string, 0, $ start_pos). $ rstr. substr ($ string, $ end_pos, strlen ($ string ));
}
Return $ rstr;
}