作者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