终于弄清楚了这两种编码的使用场景,来分享下。
一、HTML编码
当html页面中某label想要显示test这个内容时,如果简单地写label.html("test"),页面会显示一个内容为test的a标签。
这是因为是html中的特殊字符,解析时会被认为是html标签,此时要在页面上显示出一个
提供一个js进行html编码解码的方法
functionhtmlencode(s){
vardiv = document.createElement_x('div');
div.appendChild(document.createTextNode(s));
returndiv.innerHTML;
}
functionhtmldecode(s){
vardiv = document.createElement_x('div');
div.innerHTML = s;
returndiv.innerText;
}
另外,在使用MVC时,@Model.name这种形式已经对该字段进行html编码了,所以一般不会有这种问题。
但要注意,若是要在text的vlaue中显示,实则是不需要进行HTML编码的,此时需要用@Html.Raw(Model.name)这种形式,来获取原内容。
二、URL编码
url编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值
,将它们以name/value参数编码(移去那些不能传送的字符,将数据排行等等)作为URL的一部分或者分离地发给服务器。
任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 %
这些特殊的字符。其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。
以上来自百度百科
举一个使用场景,比如页面跳转时的参数,?a=中国人+
,若直接重定向到此链接,+特殊字符会被过滤掉,此时就需要进行url编码了
js中自带了url编码方法,encodeURI()、encodeURIComponent()
对应的url解码方法,decodeURI()、decodeURIComponent()
BTW:C#中对URL编码的方法
编码:Server.UrlEncode(string)
解码:Server.UrlDecode(string)