从哪儿截断?

在网站中经常会遇到截断文字的情况。比如文字只允许单行出现,但行宽是有限的,所以过长的文字就需要截断。或是类似于xmren首页的情况,大家写的日志都比较长,不可能每篇都完整显示出来。这个时候就需要对用户的内容做个截断。

但截断的话,涉及好几个小技术点。
首先是字符集的问题,UTF-8和GB2312的不同。在低版本的PHP中可能会遇到最后一个UTF-8汉字截断成乱码的情形。xmren全站都是以UTF-8编码的,这里我用了一个正则匹配来把字符串变成字符的数组。

preg_match_all ("/[\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]/", $string, $info);

以上是一整行哦:)这样$info[0]就是$string对应的数组了。如果是汉字的话,也可以很顺利地分配到$info去,然后根据$info的长度做截断就不会出现“半个汉字”的问题了。

其次,也是我考虑得比较多的,在哪儿截断?一般而言,截断是一个substring的操作。比如我希望最长是10个字符,就在第10个字符处截断就了事了。但xmren的首页采取了另一种方式,就是当第10个字符不是结束符也不是标点的时候,截断到从第10个字符开始的第一个表示语句停顿的标点。比如句号、逗号、右引号、右括号、省略号、感叹号等等。这样读者在xmren的首页就可以看到一句话的相对完整内容。而不是看到一个含义不完整句子。

Copyright © 2007. All Rights Reserved.

发表评论

电子邮件地址不会被公开。 必填项已用*标注