今天在项目中遇到这样一个需求,评论信息内容很多,在后台评论列表展示时:如果字数小于50时,全部显示。否则,显示前50个字符+省略号。
本以为是很简单的需求,于是乎就利用substr进行计算,写了如下代码,很快就完成了。
/**
* 截取字符串
* @param $content
* @return string
*/
static public function getContent($content){
$content=strip_tags($content);
$contentLen=strlen($content);
if($contentLen>100){
$content=substr($content,0,100,'utf-8');
$contentStr=$content.'...';
}else{
$contentStr=$content;
}
return $contentStr;
}
测试时,由于评论全是英文,并没有发现问题。经过多次测试,发现当评论有中文时,会出现??。
当时以为是编辑器的bug,经过多方检查。发现php有个mb_substr()函数,这时可以用mb_substr()/mb_strcut这个函数,mb_substr() /mb_strcut的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符串的编码,但是 一般的服务器都没打开php_mbstring.dll,需要在php.ini中把php_mbstring.dll打开。
明白了mb_substr()使用后,就写了一个工具方法,完美解决了此问题。具体代码如下:
/**
* 截取字符串
* @param $content
* @return string
*/
static public function getContent($content){
$content=strip_tags($content);
$contentLen=mb_strlen($content);
if($contentLen>100){
$content=mb_substr($content,0,100,'utf-8');
$contentStr=$content.'...';
}else{
$contentStr=$content;
}
return $contentStr;
}
以上属于个人见解,如有不正确之处,欢迎指正。