mb_substr()需要库支持吧!能说得详细一点吗?还有其他好一点的办法吗?
解决方案 »
- php日历控件问题
- PHP SQL查询问题...........麻烦高手指点...
- php问题
- php的stream_socket_client 方法被禁用,有替代方法吗
- PHPe开始接受国内首款PHP文化T-shirt预订~
- 急招PHP高手
- 如何在frame中传值!
- 急急!!!!这样写sql有问题吗?请指教!!
- php中的ftp_connect等函数为什么不能使用?我得版本是4.0
- WampServer端口的修改
- 一个功能极其强大的PHP树类 (目录树能做的和windows资源管理器中一模一样)
- 高分问:exec("/bin/tar -xf /usr/local/update/newfile")不执行问题
$str="这个字符好长呀,^_^";
$Short_Str=showShort($str,4);//截取前面4个汉字,结果为:这个字符...
Echo "$Short_Str";
Function csubstr($str,$start,$len)
{
$strlen=strlen($str);
$clen=0;
for($i=0;$i<$strlen;$i++,$clen++)
{
if ($clen>=$start+$len)
break;
if(ord(substr($str,$i,1))>0xa0)
{
if ($clen>=$start)
$tmpstr.=substr($str,$i,2);
$i++;
}
else
{
if ($clen>=$start)
$tmpstr.=substr($str,$i,1);
}
} return $tmpstr;
}
Function showShort($str,$len)
{
$tempstr = csubstr($str,0,$len);
if ($str<>$tempstr)
$tempstr .= "..."; //要以什么结尾,修改这里就可以.return $tempstr;
}
//参 数:$str是原字符串,$len是要取字符串的长度
//功 能:取指定长度的字符串
//返回值:截取后的字符串
function h_substr($str,$len)
{
if(func_num_args() <= 1) return $str;
elseif(func_num_args() == 2)
{
preg_match_all("/[\x80-\xff]?./",$str,$ar);
return join("",array_slice($ar[0],0,($len-1)))."...";
}
elseif(func_num_args() >= 3)
{
$start= func_get_arg(1);
$len = func_get_arg(2);
preg_match_all("/[\x80-\xff]?./",$str,$ar);
return join("",array_slice($ar[0],$start,($len-1)))."...";
}
}
<?php
$str = "I love 中国" ; if(strlen($str) > 10)
{
$str = substr($str, 0, -1) ;
$str .= chr(0)."..." ;
} echo $str ; // 就输出"I love 中..."了
?>而不必装载mb_string扩展库。注意在mb_string函数库中是按字计算的,一个汉字是两个字节,在mb_string中被记为1。所以strlen也要改用mb_strlen。
当然就更不必要使用低效的基于循环判断的自定义函数了
学习……