2009年1月22日星期四

[PerlChina] Re: 如何计算utf8字符串长度,把中文字按两字符长度算?????

如果是3就是错啦,中间带一个英文字符,那显示出来会是4.这里你根本不知道中间有几个汉字.使用等宽字体时,页面布局比较乱.

以下是php处理的方法,不知道perl该怎么做
<?
function toFixLen($str, $len) { // 固定长度字符串的截取,UTF-8
$str=trim($str);

$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, $str, $t_string);

$lt = count($t_string[0]);
$str = '';
$l = 0 ;
foreach($t_string[0] as $k=>$s){
$l += (strlen($s)==1?1:2);
if($l>=$len-3 && $k!=$lt){
$str .= '...';
break;
}else{
$str .= $s;
}
}
return $str;
}

?>

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

没有评论: