做一个博客系统限制字符数最大为65535字节,往数据库插入数据前,要用javascript限制一下输入字数,数据库用的是utf-8编码,由于一个英文字母数字等占1个字节,而一个汉字占3个字节,有什么javascript可以准确计算出所输入的字节数(如英文字符等算一个字符,其它的统统算3个字符)?

解决方案 »

  1.   

    L@_@K
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
      <title> new document </title>
      <meta name="generator" content="editplus" />
      <meta name="author" content="" />
      <meta name="keywords" content="" />
      <meta name="description" content="" />
     </head> <body>
      <script type="text/javascript">
      <!--
    function countByteLength(str, cnCharByteLen)
    {
    var byteLen = 0; for (var i=0; i<str.length; i++)
    {
    alert(str.charAt(i));
    if ((/[\x00-\xff]/g).test(str.charAt(i)))
    byteLen += 1;
    else
    byteLen += cnCharByteLen;
    alert(byteLen);
    } return byteLen;
    }// 哈喽,world!
    // 17
    alert(countByteLength("哈喽,world!", 3));
      //-->
      </script>
     </body>
    </html>
      

  2.   


    var s="12中文";
    var n=0;
    for(i=0;i<s.length;i++){
       if(s.charCodeAt(i)<128) n++;
       else n += 3;    
    }
    alert(n);
      

  3.   

    <script type="text/javascript">    
    //短信字数限制    
    function textCounter(obj, showid, maxlimit) {    
        var len = strLen(obj.value);    
        var showobj = document.getElementById(showid);    
        if(len > maxlimit) {    
            obj.value = getStrbylen(obj.value, maxlimit);    
            showobj.innerHTML = '0';    
        } else {    
            showobj.innerHTML = maxlimit - len;    
        }    
        if(maxlimit/2 - len > 0) {    
            showobj.parentNode.style.color = "";    
        } else {    
            showobj.parentNode.style.color = "red";    
        }    
            
    }    
    function getStrbylen(str, len) {    
        var num = 0;    
        var strlen = 0;    
        var newstr = "";    
        var obj_value_arr = str.split("");    
        for(var i = 0; i < obj_value_arr.length; i ++) {    
            if(i < len && num + byteLength(obj_value_arr[i]) <= len) {    
                num += byteLength(obj_value_arr[i]);    
                strlen = i + 1;    
            }    
        }    
        if(str.length > strlen) {    
            newstr = str.substr(0, strlen);    
        } else {    
            newstr = str;    
        }    
        return newstr;    
    }    
    function byteLength (sStr) {    
        aMatch = sStr.match(/[^\x00-\x80]/g);    
        return (sStr.length + (! aMatch ? 0 : aMatch.length));    
    }    
    function strLen(str) {    
        var charset = document.charset;     
        var len = 0;    
        for(var i = 0; i < str.length; i++) {    
            len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == "utf-8" ? 1 : 1) : 1;    
        }    
        return len;    
    }    
    </script>   
    <textarea class="tarea" name="newcontent" id="newcontent" oninput="textCounter(this,'maxlimit',140)" onpropertychange="textCounter(this,'maxlimit',140)"/></textarea>   
       
    还可以输入<strong id="maxlimit">140</strong>字 
      

  4.   

    重新优化了下L@_@K
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
      <title> new document </title>
      <meta name="generator" content="editplus" />
      <meta name="author" content="" />
      <meta name="keywords" content="" />
      <meta name="description" content="" />
     </head> <body>
      <script type="text/javascript">
      <!--
    function countByteLength(str, cnCharByteLen)
    {
    var reCnChar = /[^\x00-\xff]/g; return str.length + (str.match(reCnChar).length * --cnCharByteLen);
    }var str = "哈喽,world!\nHello, world!";
    // \n 被识别为一个字符
    alert("\n".length);
    alert(str);
    // 31
    alert(countByteLength(str, 3));
      //-->
      </script>
     </body>
    </html>
      

  5.   

    我就来个简单的
    <textarea maxlength="65535"></textarea>
      

  6.   

    <div style="color:blue">test</div>