PHP-php截取字符问题
我有一个网页,由于要多次输出数据库的内容,并且需要控制输出长度以,大概就是
<ul>
<li><?php echo leftStr($val['name'];?></li>
这里由于li需要控制,比如只能取5个字符,left就是截取函数,截取前5个字符,并且需要考虑字符集,于是从网上找了个公用的:
function leftStr($str, $start=0, $length, $charset="utf-8", $suffix=true) {
if(strlen($str) <= $length) return $str;
$re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
$re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
$re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
$re['big5'] = "/[x01-x7f]|x81-xfe/";
preg_match_all($re[$charset], $str, $match);
$slice = join("",array_slice($match[0], $start, $length));
//if($suffix) return $slice;
return $slice;
}
由于有几百次数据输出,感觉这个函数有限,例如使用了正则,正则匹配是需要消耗时间的。
请问大家有什么好的办法?
本来考虑控制css输出,固定li,但前端说不方便
我考虑过一下js的substr方法,但如何在html中输出php,还是多考虑下php的高效函数
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
iconv_set_encoding("internal_encoding", "UTF-8");
echo iconv_substr('11测试1111',0,3);
你用mb_substr就可以呀,再说你也可以用缓存呀,若你的数据经常变你可以每5分钟更新一次缓存呀,没必要每次都从数据库读。
/**
* 截取字符串(支持中英文)
* @param string $string 需要截取的字符串
* @param int $length 取多少个字符
* @return string
*/
function usubstr($string, $length) {
if (mb_strlen($string, 'utf-8') <= $length) {
return $string;
} else {
return mb_substr($string, 0, $length, 'utf-8') . '...';
}
}