Prefacio : Estoy usando la solicitud de obtención en http, pero no quiero entregársela a otros en texto sin formato. Después del cifrado, los datos contienen el signo "+".
Conocimiento : si hay caracteres especiales como " & " y " + " en los parámetros enviados , si no se procesan, el final del servicio tratará los que están después de & como otro parámetro.
Por ejemplo, list?act=go&state=5 obtiene los valores de act y state .
Pero si desea que el valor de act sea una cadena de "go&state=5" , debe escapar (el método general 2 se puede usar en consecuencia)
1. Reemplazar espacios con signos más (+) %2B
2. Los caracteres de espacio en la URL pueden usar el signo + o %2O
3. La barra diagonal ( / ) separa directorios y subdirectorios %2F
4. El signo de interrogación ( ? ) separa la URL y la consulta %3F
5. El signo de porcentaje (%) especifica el carácter especial %25.
6. Marcador designado por # &23
7. Parámetros separados por el signo %26
8. = signo separa los parámetros %3D
Solución:
Método 1 : Modifique el lado del servidor y reemplace los espacios con "+". Este método solo es aplicable cuando hay "+" y no hay espacios en los parámetros .
//请求接口时,客户端向服务器传递参数时,参数中的“+”会变成空格,因为URL中默认的将“+”号转义了
//例如生成的客户端链接为http://licalhost:8080/download?reqStr=sddwc+qwed+drwdef
//传到服务端后台reqStr=sddwc qwed drwdef
//服务端转换之后reqStr=sddwc+qwed+drwdef
reqStr = reqStr.replaceAll(" ","+");
Método 2: modifique el cliente y reemplace todos los "+" en los parámetros con "+" en el lado del cliente con "2B%", de modo que se pueda obtener "+" cuando los parámetros se pasen al servidor (método general, usted puede transferir caracteres especiales )
//java 使用
//请求接口时,客户端向服务器传递参数时,参数中的“+”会变成空格,因为URL中默认的将“+”号转义了
//例如生成的客户端链接为http://licalhost:8080/download?reqStr=sddwc+qwed+drwdef
reqStr = reqStr.replaceAll("\\+","%2B");
//此时的客户端真实链接为http://licalhost:8080/download?reqStr=sddwc%2Bqwed%2Bdrwdef
//到服务器端的reqStr=sddwc+qwed+drwdef
js使用
局部替换
var str = 'abcadeacf';
var str1 = str.replace('a', 'o');
alert(str1);
// 打印结果: obcadeacf
全局替换
var str2 = str.replace(/a/g, 'o');
alert(str2);
//打印结果: obcodeocf
处理方法:
function URLencode(sStr)
{
return escape(sStr).replace(/\%/g,"%25").replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');
}
//IE8不支持escape
function URLencode(sStr)
{
return sStr.replace(/\%/g,"%25").replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');
}
Método 3: Modificar el lado del servidor , especial: se puede usar si el parámetro de entrada es request , pero no si se obtiene reqStr mediante el método de anotación.
En circunstancias normales, el método para obtener parámetros es reuqest.getParameter . En este caso, se debe usar request.getQueryString().substring(0) y luego se debe analizar la cadena obtenida.
String reqStr =request.getQueryString().substring(0);
a=a.substring(10)