[問題] 如何計算UTF-8編碼的字串長度

看板Ajax作者 (路人酒菜)時間14年前 (2011/11/30 21:22), 編輯推噓0(007)
留言7則, 2人參與, 最新討論串1/1
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

11/30 22:34, , 1F
乍看之下好像是沒什麼錯 不過可能有個無解的問題
11/30 22:34, 1F

11/30 22:35, , 2F
javascript內部使用UCS2,non-BMP的部份會直接掉字算不到
11/30 22:35, 2F

11/30 22:35, , 3F
這是javacsript本身的問題,無法用javascript解。
11/30 22:35, 3F

11/30 22:37, , 4F
除非另行打造String class
11/30 22:37, 4F

11/30 22:39, , 5F
http://0rz.tw/Sw6Ms 可以參考這個,不過non-BMP的其實
11/30 22:39, 5F

11/30 22:40, , 6F
不會太常遇到,總之不要拿這函式來檢查長度限制就是了。
11/30 22:40, 6F

11/30 23:48, , 7F
感謝!!! 想不到還是只能靠Server端檢核!!!
11/30 23:48, 7F
文章代碼(AID): #1ErYu9_B (Ajax)