用js更好地截取定长字符串
作者:canque 来源:canque的blog 发布时间:2008-01-16 12:48:00
标签:字符串,js,正则表达式
有的时候,我们为了保持网页的美观,需要将较长的文字在一定长度时截断。比如我们希望在列表中显示文章标题的前15个字,那么一个这样的标题:
“rssidea是残缺学习web技术的个人网站”
就可能被截取为:“rssidea是残缺学习web……”
最常见的实现代码是(以javascript为例,php类似):
这样做有一些不好的地方。众所周知,在计算机里,数字、字母等是单字节,而汉字、全角字符等是双字节,也就是数字字母占的宽度和汉字所占宽度不一样。当我们希望截取相同的字符宽度的时候,这个方法就不好了。
更严重的是,在php等服务器端语言中,字符串长度按单字节长度计算,也就是说一个汉字的字符长度为2,所以当字符截取刚好在一个汉字中间截断的时候,会引起乱码现象。因为计算机无法正常显示半个汉字。
改进的代码:
简单说下思路,先把字符串分散到数组中,当然不是随意分散,而是按2个字节的长度分散,这步很关键。我使用的是正则表达式(似乎也没有其他办法):
如果遇到双字节字符([^\x00-\xff])就把双字节字符添加到数组,如果遇到单字节字符就把两个单字节字符添加到数组。
然后把问题转化为截取数组长度,问题解决!
这种方式有一些误差(你看出来了吗?),但是效率比较高。网上还有一种循环读取的方式,误差较小,但是效率变得低下。感兴趣的朋友可以自己搜寻。
0
投稿
猜你喜欢
- 迭代首先理解下什么是迭代,python中所有从左往右扫面对象的方式都是可迭代的有哪些方式是可迭代的:1.文件操作 我
- 事务日志记录着在相关数据库上的操作,同时还存储数据库恢复(recovery)的相关信息。收缩日志的原因有很多种,有些是考虑空间不足,有些则是
- 每次卷积神经网络训练的结果都只保存了最后一部分,查阅了一下相关资料,发现是定义saver时采用的默认值,这里进行如下设置: saver =
- 至于对好广告的评判,不同的人有不同的标准,一些人认为那些打动人、有新意、有共鸣的广告是好广告,另一些人的观点则是:观众喜欢与否,不是广告好与
- 在网络设备管理中,传输配置文件、镜像文件等是经常需要进行的操作。Netmiko是一个Python库,可用于与各种网络设备进行交互,提供了一些
- 利用sklearn画出决策树并保存为PDF下载Graphviz进入官网下载并安装:https://graphviz.gitlab.io/_p
- 注意这里提取到的人脸图片的保存地址要改成自己要保存的地址opencv人脸的检测模型的路径也要更改为自己安装的opencv的人脸检测模型的路径
- 前言前面我们介绍了 pandas 的基础语法操作,下面我们开始介绍 pandas 的数据读写操作。pandas 的 IO API 是一组顶层
- dispy,是用asyncoro实现的分布式并行计算框架。框架也是非常精简,只有4个组件,在其源码文件夹下可以找到:dispy.py (cl
- 引用是什么在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量
- 函数可以参考:<% '注册论坛用户,参数说明 'username 用户登录名称 
- 光学元件类平面反射镜是一种极为简单的模型,因为我们只需要考虑一个平面即可。但是除此之外的其他光学元件,可能会变得有些复杂:我们必须考虑光在入
- MYSQL初学者使用指南与介绍 一、连接MYSQL。 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的M
- 想当初,考研的时候要是知道有这么个好东西,计算定积分。。。开玩笑,那时候计算定积分根本没有这么简单的。但这确实给我打开了一种思路,用编程语言
- 这个可能是容易被忽略的问题,首选我们要清楚:MySQL中,AND的执行优先级高于OR。也就是说,在没有小括号()的限制下,总是优先执行AND
- 额……首先呢说说这个标题吧,实在不知道叫什么好,因为这个demo呢其实一个艾文王今天中午给丢给我一个图。他说这个是一个面试题,给我看看。这样
- 1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。 他
- 一、打开/关闭文件1、对文件操作时首先要打开文件,打开文件用 fopen()函数,语法是:fopen(filename,mode,inclu
- python读取.txt(.log)文件 、.xml 文件 、excel文件数据,并将数据类型转换为需要的类型,添加到list中详解1.读取
- 在access中进行时间的比较sql语句很简单,如select * from table where thetime>#\"