网络编程
位置:首页>> 网络编程>> JavaScript>> 用js更好地截取定长字符串

用js更好地截取定长字符串

作者:canque 来源:canque的blog 发布时间:2008-01-16 12:48:00 

标签:字符串,js,正则表达式

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

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

就可能被截取为:“rssidea是残缺学习web……”

文章推荐:asp测字符串长度及截取定长字符串汉字的处理

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

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

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

改进的代码:

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

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

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

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

0
投稿

猜你喜欢

  • WordPress可以改造成twitter一样的微博网站,但是有一个坏处就是你要么用来做博客要么用来做微博,功能难兼得。相信大家在访问一些知
  • 某些杀毒软件会把正常的asp文件误认为是asp木马文件,而自动删除,影响正常使用。下面方法可能会有效避免被杀毒软件删除把dim t
  • Oracle的系统要求企业版:CPU最低PENTIUM200M推荐PENTIUMIII1G以上 内存最低128M推荐512M 硬盘空间系统盘
  • 刚开始时,这个表的字段很少(10个以内),前开发者把这个表的所有存储过程与触发器以及表函数全是写死了。用户每添加一些字段,都需要手动去更改这
  • 通配符:通配符描述示例%包含零个或更多字符的任意字符串。WHERE title LIKE '%computer%' 将查找处
  • 在jQuery的官方文档中,提示用户这是一个低级的方法,应该用.data()方法来代替。$.data( element, key, valu
  • 好记星不如烂笔头,适时的总结梳理知识让人更轻松愉快。今天总结下学习和开发中遇到的JavaScript执行顺序的问题,今天挖个坑,以后会慢慢填
  •     1.问:在DW中如何设置页面边距为0?答:在DW中似乎没有直接设置的方法,你只有在Html文档中插入以
  • 这段时间我一直在说设计需要有层次感,这种层次感可能有很多类型,比如色彩的层次感,或是元素的层次感。当一个设计缺乏层次感的时候页面所表现出来的
  • 前段时间在论坛上有人问到一个淘宝网上的hover伪类实现的效果如果兼容ie6。其实,问题很简单,就是hover伪类在IE6中得不到很好的支持
  • CSS执行顺序与优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其
  •  对于网站设计者而言,时常处理大批量的文件是难免的,特别是图片和一些文本文本文件,更是经常处理。而由于网站大量文件的关系,对于同类
  • javascript 代码实现vbscript中的trim、left、right等函数兼容IE,FireFox。<style>b
  • 我不知道有多少人在使用浏览器的书签,这东东有时候实在是很有用的,比如现在说到的jQuerify书签。jQuerify书签的功能很简单,那就是
  • ASP中的全角和半角转化函数,使用方法,传入要转换的字符给str即可,flag设置要转换的类型。<%  Function&n
  • 在Microsoft OfficeAccess和 Microsoft OfficeExcel之间存在多种交换数据的方法。若要将Access中
  • 众所周知,透明的PNG图片在IE6中是不透明的。为了在IE6中显示透明的PNG图片,找了一下方法,在网页中嵌入JS语句,可是执行效果并不尽如
  • 因为即将开始淘宝的项目,在前端方面必然要深入了解taobao ued规范,规范还是比较全的,只是对taobao.com的编码和字符集的选择有
  • 实现原理:将用户信息保存在数据库中,若能在数据库中检索到用户输入的姓名和口令,就允许访问该一页面。代码如下:protect.asp<h
  • 看了大峡搞的级联菜单,我也班门弄斧一把,嘿嘿,花了一点时间搞了个级联菜单贴上来看看。本例中只要你选择成员分类名称就会自动显示成员名称:&nb
手机版 网络编程 asp之家 www.aspxhome.com