Escape y solución de caracteres especiales de URL en http

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)

Supongo que te gusta

Origin blog.csdn.net/qq_40453972/article/details/129299892
Recomendado
Clasificación