url参数中有+、空格、=、%、&、#等特殊符号的问题解决
解决办法
将这些字符转化成服务器可以识别的字符,对应关系如下:
URL字符转义
用其它字符替代,或用全角的。
+ URL 中+号表示空格 %2B
空格 URL中的空格可以用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的URL和参数 %3F
% 指定特殊字符 %25
# 表示书签 %23
& URL 中指定的参数间的分隔符 %26
= URL 中指定参数的值 %3D
/*特殊字符解码
* + URL 中+号表示空格 %2B
* 空格 URL中的空格可以用+号或者编码 %20
* / 分隔目录和子目录 %2F
* ? 分隔实际的URL和参数 %3F
* % 指定特殊字符 %25
* # 表示书签 %23
* & URL 中指定的参数间的分隔符 %26
* = URL 中指定参数的值 %3D
*/
public static String decodeStr(String str) {
str = str.replaceAll("44F", "-");
str = str.replaceAll("%2B", "+");
str = str.replaceAll("%20", " ");
str = str.replaceAll("%3F", "?");
str = str.replaceAll("%23", "#");
str = str.replaceAll("%26", "&");
str = str.replaceAll("%3D", "=");
str = str.replaceAll("%2F", "/");
str = str.replaceAll("%RR", "
");
str = str.replaceAll("%NN", "
");
//str = str.replaceAll("%25", "%");
return str;
}
//特殊字符编码
public static String encodeStr(String str) {
str = str.replaceAll("-", "44F");
str = str.replaceAll("
", "%NN");
str = str.replaceAll("
", "%RR");
str = str.replaceAll("\+", "%2B");
str = str.replaceAll(" ", "%20");
str = str.replaceAll("\?", "%3F");
str = str.replaceAll("#", "%23");
str = str.replaceAll("&", "%26");
str = str.replaceAll("=", "%3D");
str = str.replaceAll("/", "%2F");
//str = str.replaceAll("%25", "%");
return str;
}