编码与安全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个:
2、encodeURI和encodeURIComponent,唯一区别就是编码的字符范围
用法如下例如:
1
1
encodeURI(URIString)
必选的URIString参数代表一个已编码的URI。
说明
将文本字符串编码为一个有效的统一资源标识符 (URI)。encodeURI方法返回一个编码的URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。
encodeURI不编码字符有82个:
encodeURIComponent(encodedURIString)
必选的 encodedURIString 参数代表一个已编码的 URI 组件。
说明
将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。encodeURIComponent方法返回一个已编码的URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串。请注意,如果该字符串代表一个路径,例如/folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到web服务器时将是无效的。如果字符串中包含不止一个URI组件,请使用encodeURI方法进行编码。
encodeURIComponent不编码字符有71个:
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)));
注意: 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)));
相关文章推荐
- 关于escape(), encodeURI()和encodeURIComponent()编码的几个实验
- js中编码函数:escape,encodeURI与encodeURIComponent详解
- js编码之 encodeURIComponent
- encodeURIComponent编码后java后台的解码
- 【javascript基础】 JS中编码解码escape、encodeURI、encodeURIComponent区别详解【转】
- encodeURIComponent编码后java后台的解码 (AJAX中文解决方案)
- JS中三种编码方式(escape,encodeURI,encodeURIComponent)
- JS编码三种方法的区别:escape、encodeURI和encodeURIComponent
- encodeURIComponent()对js参数进行编码,防止错误值
- encodeURIComponent编码后java后台的解码
- js对文字进行编码escape,encodeURI,encodeURIComponent
- JS中EncodeURIComponent与编码总结
- JS中的三种编码encodeUR、encodeURIComponent、escape()
- URL传递过程中几种编码escape()、encodeURI()、encodeURIComponent()
- 前台用js的encodeURIComponent对中文编码,后台正确获取值的方法
- 关于 web中 使用 java.net.URLEncoder.encode 要编码两次呢 , js的encodeURIComponent 同理
- encodeURIComponent编码后java后台的解码
- JavaScript 的几个编码函数 escape/encodeURI/encodeURIComponent
- encodeURIComponent编码后java后台的解码
- js中的三个编码函数:escape,encodeURI,encodeURIComponent