400 Bad Request-Url特殊字符编码
今天碰到一个诡异的问题,线上系统没有问题可以访问,但在本机测试却不行。现象是在火狐访问空白页面,当时就蒙了啊,后来换ie则提示:400 Bad Request。
原来url中不允许出现特殊字符,比如:%
修改前url:http://index.youku.com/vr_keyword/id_6ZOB6KGA5L2%2f5ZG9&type=alldata
修改后url:http://index.youku.com/vr_keyword/id_6ZOB6KGA5L2%2f5ZG9&type=alldata
修改前代码:
var reg = new RegExp("\+", "g"); // 创建正则RegExp对象 var reg2 = new RegExp("\=", "g"); var reg3 = new RegExp("\/", "g"); basewords = basewords.replace(reg, "%2b"); basewords = basewords.replace(reg2, "%3d"); basewords = basewords.replace(reg3, "%2f");
修改后的代码:
var reg = new RegExp("\+", "g"); // 创建正则RegExp对象 var reg2 = new RegExp("\=", "g"); var reg3 = new RegExp("\/", "g"); basewords = basewords.replace(reg, "%252b"); basewords = basewords.replace(reg2, "%253d"); basewords = basewords.replace(reg3, "%252f");
PS:修改前url在线上是没有问题的,使用的resin服务器,但本机开发的tomcat却无法通过!估计处理机制有区别!
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号。 编码的格式为:%加对应字符的ASCII(16进制)码值。例如:空格的编码值是”%20″ 。
一些URL特殊符号及编码(十六进制值)
1. + URL中+号表示空格 %2B
2. 空格 URL中的空格可以用+号或者编码 %20
3. / 分隔目录和子目录 %2F
4. ? 分隔实际的 URL 和参数 %3F
5. % 指定特殊字符 %25
6. # 表示书签 %23
7. & URL中指定的参数间的分隔符 %26
8. = URL中指定参数的值 %3D
java中URL的编码和解码函数: java.net.URLEncoder.encode(String s) java.net.URLDecoder.decode(String s);
javascript中URL的编码和解码函数: escape(String s) unescape(String s) ;
更详细资料:
http://www.cnblogs.com/leaven/archive/2012/07/12/2588746.html