js更好地截取字符串

作者:canque 来源:canque博客 时间:2008-03-11 19:00:00 

有的时候,我们为了保持网页的美观,需要将较长的文字在一定长度时截断。比如我们希望在列表中显示文章标题的前15个字,那么一个这样的标题:

“rssidea是残缺学习web技术的个人网站

就可能被截取为:

“rssidea是残缺学习web……”

最常见的实现代码是(以javascript为例,php类似):


这样做有一些不好的地方。众所周知,在计算机里,数字、字母等是单字节,而汉字、全角字符等是双字节,也就是数字字母占的宽度和汉字所占宽度不一样。当我们希望截取相同的字符宽度的时候,这个方法就不好了。

更严重的是,在php等服务器端语言中,字符串长度按单字节长度计算,也就是说一个汉字的字符长度为2,所以当字符截取刚好在一个汉字中间截断的时候,会引起乱码现象。因为计算机无法正常显示半个汉字。

改进的代码:


简单说下思路,先把字符串分散到数组中,当然不是随意分散,而是按2个字节的长度分散,这步很关键。我使用的是正则表达式(似乎也没有其他办法):

如果遇到双字节字符([^\x00-\xff])就把双字节字符添加到数组,如果遇到单字节字符就把两个单字节字符添加到数组。

然后把问题转化为截取数组长度,问题解决!

相关文章推荐:ASP给长的标题加省略号...

这种方式有一些误差(你看出来了吗?),但是效率比较高。网上还有一种循环读取的方式,误差较小,但是效率变得低下。感兴趣的朋友可以自己搜寻。

标签:字符串,标题,js
0
投稿

猜你喜欢

  • Web表单设计:表单结构

    2011-04-22 12:32:00
  • Oracle 函数大全

    2009-07-23 14:29:00
  • 100%全屏布局设计

    2009-05-15 12:24:00
  • 分享一些可视信息设计资源

    2009-10-06 15:19:00
  • 戴尔是如何设计新官网首页的

    2008-07-08 19:02:00
  • 极致之美——百行代码实现全新智能语言Lisp

    2010-07-13 13:07:00
  • Rs.Open参数说明

    2008-05-12 22:43:00
  • CSS布局之浮动(一)两列布局

    2008-08-18 21:24:00
  • 网站通过W3C标准注意点

    2010-01-14 20:15:00
  • 怎样设置密码保护问题

    2009-02-16 13:12:00
  • SQL语句之WHERE子句的使用方法

    2007-08-11 12:25:00
  • WEB设计经验-来自Microsoft

    2008-05-15 07:30:00
  • 用户体验的时间尺度[译]

    2009-10-30 18:25:00
  • 考虑SQL Server安全时所应注意的几个方面

    2009-01-04 13:57:00
  • asp利用XmlHttp和Adodb.Stream采集图片

    2007-12-06 18:42:00
  • 利用sys.sysprocesses检查SqlServer的阻塞和死锁

    2011-11-03 17:24:11
  • 一个二级伸缩下拉菜单代码

    2008-06-24 18:12:00
  • 不完全HTML在线编辑器收集

    2007-11-08 12:20:00
  • asp图片加水印的功能代码

    2011-02-05 11:02:00
  • 利用SQL Server复制技术实现数据同步更新

    2009-10-23 14:11:00
  • asp之家 网络编程 m.aspxhome.com