字符编码问题

为什么要用编码函数encodeURIComponent?
前端:请求的url参数处理,1)参数有可能包含& # 这些url中有特殊含义的字符,会破坏参数的完整性
2) 参数中可能有中文或者其他文字,有必要前后台协议统一utf8字符
后端: 后端数据直显在页面,有可能包含<script>等与html格式冲突的字符,需要编码
 
除了encodeURIComponent外,还有encodeURI和escape。escape已废弃,encodeURI应用于对整个url编码用的也不多。
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
 
http://www.cnblogs.com/artwl/archive/2012/03/07/2382848.html
 
什么是htmlEncode?
    function html(escape) {
        /*        var replace = ["'", "&#39;", '"', "&quot;", " ", "&nbsp;", ">", "&gt;", "<", "&lt;", "&", "&amp;", ];
        escape === false && replace.reverse();
        for (var i = 0, str = this; i < replace.length; i += 2) {
            str = str.replace(new RegExp(replace[i], 'g'), replace[i + 1]);
        }
        return str;*/

        function encode() {
            htmlDiv.innerHTML = "";
            return htmlDiv.appendChild(document.createTextNode(this)).parentNode.innerHTML.replace(/\s/g, "&nbsp;");
        }

        function decode() {
            htmlDiv.innerHTML = this;
            return htmlDiv.innerText;
        }
        var str = this;
        return escape === false ? decode.apply(str) : encode.apply(str);
    }

用于将html的特殊字符转义,使用情景?
1)用户输入文字信息会回显到页面,为了防止xss输入类似<script>等各种标签,encode输入内容。
2)将html结构保存到后台进行encode,省去了每次取值时encode也防止了存储时可能的冲突(如xml的<>、js的srcipt)。
 
 
字符编码

ASCII:英文编码

GBXXXX:中文编码 gb2312<gbk<gb18030

Unicode:统一各国文字的编码,utf8 变长的编码方式

Big5:繁体编码

ISO8859-1:西欧语音编码 latin-1

 
posted on 2013-09-30 15:34  西瓜SY  阅读(222)  评论(0编辑  收藏  举报