您的位置:首页 > 其它

编码与安全encodeURI,encodeURIComponent

2017-03-03 10:17 471 查看
首先介绍一个工具Fiddler,它提供了很多方便的转码功能。点击Toolbar上的”TextWizard” 按钮,如下图: 



注意: URLEncode和HTMLEncode是两个不同的概念

URLEncode 

URL编码是为了符合URL的规范。因为在标准的URL规范中中文和很多的字符是不允许出现在URL中的。

例如在baidu中搜索”测试汉字”。 URL会变成 
http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477

所谓URL编码就是: 把所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)

JavaScript对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent, 

相应3个解码函数:unescape,decodeURI,decodeURIComponent

1、escape和encodeURI,encodeURIComponent不是同一类,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读。

escape(charString) 

必选项 charstring 参数是要编码的任意String对象或文字。

说明 

escape 方法返回一个包含了charstring内容的字符串值(Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 “%20” 。字符值大于 255 的以 %uxxxx 格式存储。escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。

注意 

escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。

escape不编码字符有69个:
*,+,-,.,/,@,_,0-9,a-z,A-Z


2、encodeURI和encodeURIComponent,唯一区别就是编码的字符范围 

用法如下例如:
<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a>');</script>
1
1
Location.href=encodeURI(http://cang.baidu.com/do/s?word=中国&ct=21);
1
1

encodeURI(URIString) 

必选的URIString参数代表一个已编码的URI。

说明 

将文本字符串编码为一个有效的统一资源标识符 (URI)。encodeURI方法返回一个编码的URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。

encodeURI不编码字符有82个:
!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z


encodeURIComponent(encodedURIString) 

必选的 encodedURIString 参数代表一个已编码的 URI 组件。

说明 

将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。encodeURIComponent方法返回一个已编码的URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串。请注意,如果该字符串代表一个路径,例如/folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到web服务器时将是无效的。如果字符串中包含不止一个URI组件,请使用encodeURI方法进行编码。

encodeURIComponent不编码字符有71个:
!, ',(,),*,-,.,_,~,0-9,a-z,A-Z


3、另外使用encodeURI方法编码的字符在PHP中可以使用urldecode()函数反编码

HTMLEncode 



-------------------------------------------------------------------------------------------------------------------

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<%@ page import="java.net.URLEncoder"%>

<%

String keyword1 = request.getParameter("keyword");

String keyword=keyword1;

if(keyword1!=null&&keyword1!=""){

    keyword = URLEncoder.encode(keyword1, "UTF-8");

}

%>

-------------------------------------------------------------------------------------------------------------------

 $('.searchKeyword').html('您搜索的内容为:' + WhsmwyCommon.xss(decodeURI(keyword)));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: