網上有不少解決方案,貢獻下我使用的兩個函數:
/** * 得到字符串的字符長度(一個漢字占兩個字符長) */ function getBytesLength(str) { // 在GBK編碼裡,除了ASCII字符,其它都占兩個字符寬 return str.replace(/[^\x00-\xff]/g, 'xx').length; } /** * 根據字符長來截取字符串 */ function subStringByBytes(val, maxBytesLen) { var len = maxBytesLen; var result = val.slice(0, len); while(getBytesLength(result) > maxBytesLen) { result = result.slice(0, --len); } return result; }
一個實例: