作者joetsai (路人酒菜)
看板Ajax
标题[问题] 如何计算UTF-8编码的字串长度
时间Wed Nov 30 21:22:15 2011
1. Wiki - UTF-8
http://en.wikipedia.org/wiki/UTF-8
2. W3Schools - JavaScript charAt() Method
http://www.w3schools.com/jsref/jsref_charat.asp
3. xkr_us - javascript - escape(), encodeURI(), encodeURIComponent()
http://xkr.us/articles/javascript/encode-compare/
我参考上面的资料後 写了下面的函式:
function getUTF8ByteLength(str) {
var length = 0;
for (var i = 0; i < str.length; i++) {
var encLength = encodeURIComponent(str.charAt(i)).length;
if (encLength > 9) {
length += 4;
} else if (encLength > 6) {
length += 3;
} else if (encLength > 3) {
length += 2;
} else {
length += 1;
}
}
return length;
}
可是还是少算的部份 因为看不到USER输入什麽
请问这样写有遗漏吗? 谢谢~~~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.184.25.220
1F:→ buganini:乍看之下好像是没什麽错 不过可能有个无解的问题 11/30 22:34
2F:→ buganini:javascript内部使用UCS2,non-BMP的部份会直接掉字算不到 11/30 22:35
3F:→ buganini:这是javacsript本身的问题,无法用javascript解。 11/30 22:35
4F:→ buganini:除非另行打造String class 11/30 22:37
6F:→ buganini:不会太常遇到,总之不要拿这函式来检查长度限制就是了。 11/30 22:40
7F:→ joetsai:感谢!!! 想不到还是只能靠Server端检核!!! 11/30 23:48