这个问题先前就回答过了
建议问问题前先搜索已解决问题// 得到字符串的真实长度(双字节换算为两个单字节)
function getStrActualLen(sChars){
return sChars.replace(/[^\x00-\xff]/g,"xx").length;
}

解决方案 »

  1.   

    // 得到字符串的真实长度(双字节换算为两个单字节)
    function getStrActualLen(sChars){
    return sChars.replace(/[^\x00-\xff]/g,"xx").length;
    }// 截取固定长度子字符串
    function getInterceptedStr(sSource, iLen){
    if(getStrActualLen(sSource) <= iLen){
    return sSource;
    }
    var ELIDED = "...";

    var str = "";
    var l = 0;
    var schar;
    for(var i=0; schar=sSource.charAt(i); i++){
    str += schar;
    l += (schar.match(/[^\x00-\xff]/) != null ? 2 : 1);
    if(l >= iLen - ELIDED.length){
    break;
    }
    }
    str += ELIDED;

    return str;
    }
      

  2.   

    function getByte(str)
    {
        tempstr=str.replace(/[\x00-\xff]/g, "a");
        tempstr=tempstr.replace(/[\uff61-\uff9f]/g, "a");//半角片假文
        tempstr=tempstr.replace(/[\u3041-\u309f]/g, "aa");//全角平假文
        tempstr=tempstr.replace(/[\u30a0-\u30ff]/g, "aa");//全角片假文
        tempstr=tempstr.replace(/[^\x61-\x61]/g, "aa");
        return tempstr.length;
    }

    function subbytestring(str, len)
    {
        var i = 0;
        var rtnStr = "";
        var subStr = "";
        for(i = 0; i < getByte(str); i++)
       {
            subStr = str.substr(i, 1);
            if(getByte(subStr) == 2 && len >= 2)
    {
        rtnStr = rtnStr + subStr;
        len = len - 2;
    }
    else if (getByte(subStr) == 1 && len >= 1)
    {
        rtnStr = rtnStr + subStr;
        len = len - 1;
    }
    else if (getByte(subStr) == 2 && len < 2)
    {
        break;

    else if (getByte(subStr) == 1 && len < 1)
    {
        break;
    }
        }
        return rtnStr
    }