使用escape是为了使所有编码都转换成统一的编码格式(Unicode), 如GBK编码的"中国", 与UTF8编码的"中国",它们的escape返回值都是一样的,所以代码具有通用性,且escape在JS1.0已经有了,各浏览器都通用
如果不考虑通用性,且html为UTF8编码的,可以用UTF8版本
escape版:
- function utf8_strlen(str)
- {
- var str_encode = escape(str);
- var cnt = 0;
- for( i=0; i<str_encode.length; i++)
- {
- if( str_encode.charAt(i) == "%")
- {
- if( str_encode.charAt(i+1) == "u" )
- {
- var value = parseInt(str_encode.substr(i+2,4),16);
- if( value < 0x0800)
- {
- cnt += 2;
- }
- else
- {
- cnt += 3;
- }
- i = i+5;
- }
- else
- {
- cnt++;
- i = i+2;
- }
- }
- else
- {
- cnt++;
- }
- }
- return cnt;
- }
UTF8专用版:
- function utf8_strlen2(str)
- {
- var cnt = 0;
- for( i=0; i<str.length; i++)
- {
- var value = str.charCodeAt(i);
- if( value < 0x080)
- {
- cnt += 1;
- }
- else if( value < 0x0800)
- {
- cnt += 2;
- }
- else
- {
- cnt += 3;
- }
- }
- return cnt;
- }