JavaScript实现的GBK、UTF8字符串实际长度计算函数


Posted in Javascript onAugust 27, 2014

大家都知道,在JS中字符串的长度不分中英文字符, 每一个字符都算一个长度,这跟PHP里的strlen()函数就不太一样。PHP里的strlen()函数根据字符集把GBK的中文每个2累加,把UTF-8的中文字符每个按3累加。

有些童鞋可能要问了,为什么要计算实际长度?

主要是为了匹配数据库的长度范围内,比如GBK的数据库某字段是varchar(10),那么就相当于5个汉字长度,一个汉字等于两个字母长度。如果是UTF8的数据库则是每个汉字长度为3。

知道了以上原理以后,我们就可以算出一个字符串的实际长度了,如果是GBK字符集遇到中文加2,如果是UTF8字符集遇到中文加3即可
GBK长度计算函数:

// GBK字符集实际长度计算

function getStrLeng(str){

    var realLength = 0;

    var len = str.length;

    var charCode = -1;

    for(var i = 0; i < len; i++){

        charCode = str.charCodeAt(i);

        if (charCode >= 0 && charCode <= 128) { 

            realLength += 1;

        }else{ 

            // 如果是中文则长度加2

            realLength += 2;

        }

    } 

    return realLength;

}

UTF8长度计算函数:
// UTF8字符集实际长度计算

function getStrLeng(str){

    var realLength = 0;

    var len = str.length;

    var charCode = -1;

    for(var i = 0; i < len; i++){

        charCode = str.charCodeAt(i);

        if (charCode >= 0 && charCode <= 128) { 

            realLength += 1;

        }else{ 

            // 如果是中文则长度加3

            realLength += 3;

        }

    } 

    return realLength;

}
Javascript 相关文章推荐
ASP中进行HTML数据及JS数据编码函数
Nov 11 Javascript
WEB高性能开发之疯狂的HTML压缩
Jun 19 Javascript
浅谈javascript中的作用域
Apr 07 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
Apr 24 Javascript
node.js中的fs.fchownSync方法使用说明
Dec 16 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
Feb 01 Javascript
Vue表单之v-model绑定下拉列表功能
May 14 Javascript
JavaScript鼠标悬停事件用法解析
May 15 Javascript
微信小程序使用前置摄像头拍照
Oct 22 Javascript
解决Vue项目中tff报错的问题
Oct 21 Javascript
如何在vue 中引入使用jquery
Nov 10 jQuery
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
JavaScript实现的使用键盘控制人物走动实例
Aug 27 #Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 #Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
Aug 27 #Javascript
jQuery中的read和JavaScript中的onload函数的区别
Aug 27 #Javascript
javascript实现的一个随机点名功能
Aug 26 #Javascript
JS按回车键实现登录的方法
Aug 25 #Javascript
在JavaScript中重写jQuery对象的方法实例教程
Aug 25 #Javascript
You might like
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
js特效,页面下雪的小例子
2013/06/17 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
Django自定义分页效果
2017/06/27 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
Python何时应该使用Lambda函数
2019/07/02 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
Python 列表反转显示的四种方法
2020/11/16 Python
flask项目集成swagger的方法
2020/12/09 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
精彩自我鉴定
2014/01/16 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
建党伟业观后感
2015/06/01 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python