mb_substr()问题,求指教

2012-09-29 00:18:15 +08:00
 mini
问一下大家,我试着自己写blog,然后前台页面一个列表页一个详情页,列表页面(主页)对文章的显示是限制字数的,详情页面试全文。

echo mb_substr($row['content'],0,200,'utf-8');

在手册找了半天找着个mb_substr函数对获取到的content限制了字数(200字节),但就遇到想推他和微博的问题了,中文和英文字母同样200个字符占位显然不一样==

我前台用的bootstrap, 想让段落间是一样的,有木有能判断中文英文然后控制不同长度的函数==



我在点点上面也发了同样的两个试了一下,也是默认显示一定长度。是我想太多了么


白丁求指导。

@haiyang416 @aidai524
4567 次点击
所在节点    PHP
8 条回复
satgi
2012-09-29 00:33:01 +08:00
中英文宽度不一样啊,你试试固定高度,然后overflow: hidden
mini
2012-09-29 00:43:35 +08:00
@satgi 恩,本来想用css控制来着,就是先问问php有没有直接的函数能解决,我知道宽度不一样,我估摸着应该有这么一个函数或者结合其他先判断中文英文然后控制不同的字数(先手动的试一下中英文相同宽高时的字节比例) 不过谢了
haiyang416
2012-09-29 02:08:05 +08:00
不理解你这什么需求是为了什么呀,难道你还要写全英文么?

你用mb_substr($string, 0, 200, 'UTF-8')截取字符串,汉字和英文当然就是等长的。

如果你觉得200英文字符太短的话,就只能自己写个函数,直接正则匹配字符串,如果是全字母和数字,就多截取一些,中文就少截取一些。

或者直接substr截取,汉字的字节要比英文多,同样长度,英文多3倍左右字符。

还要考虑到不要截断单个汉字和英文单词。
haiyang416
2012-09-29 02:12:02 +08:00
可以打印看下。
http://gist.github.com/3801331
fmfsaisai
2012-09-29 02:26:50 +08:00
wsph123
2012-09-29 19:56:14 +08:00
function utf_substr($str,$len){
if(strlen($str)<$len)return $str;
for($i=0,$p=0;$i<$len;$i++)
$p+=ord(substr($str,$p,1))>127?3:1;
$re=substr($str,0,$p);
if($re!=$str)$re.='…';
return $re;
}

我之前写的函数如何?
mini
2012-09-29 22:21:04 +08:00
@haiyang416
@fmfsaisai
@wsph123 谢谢各位!
mini
2012-09-29 22:56:33 +08:00
@haiyang416
@fmfsaisai
最后用了mb_strimwidth($row['content'],0,100,"...")
觉得substr($row['content'],0,100)也可以。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/48962

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX