encodeURI, encodeURIComponent y problemas confusos en chino

Acerca de la parte delantera:

encodeURIComponent (), para codificar el valor de entrada del cuadro de texto, el resultado de la codificación de caracteres especiales es% más la tabla de comparación hexadecimal del código ASCII de estos símbolos.

encodeURI () codifica la URL completa, pero no codifica los siguientes caracteres @ # $ & =.: / ;?  + , estos símbolos son básicamente símbolos especiales en la URL http y no están codificados.

@  
# Una ubicación en la página
: /.? = & La mayoría de las URL contienen básicamente los símbolos   http://www.a.com/a ? A = b & c = d
 
+  
PS  

La relación y la diferencia entre los dos métodos:

  1. Independientemente de lo anterior, los caracteres en [a-zA-Z0-9] y ! * () '. No  se codificarán, es decir, después de la codificación o ellos mismos.
  2.  Los dos métodos de codificación tienen los mismos resultados de codificación para el chino.
  3. Los caracteres que encodeURL () no codificará son básicamente símbolos reservados en httpURL. Por lo tanto, encodeURIComponent () definitivamente codificará estos símbolos, para no interferir con la URL.

Algunos resultados de codificación de uso común: (la parte de fondo son los caracteres no codificados por encodeURL)

Valor original encodeURIComponent

encodeURI

% % 25 % 25
Espacio % 20

% 20

Y % 26 Y
= % 3D =
/ % 2F /
@ % 40 @
; % 3B ;
PS % 24 PS
: % 3A :
+ % 2B +
% 3F ?
# % 23 #
chino % E4% B8% AD% E6% 96% 87 % E4% B8% AD% E6% 96% 87

 Sobre el backend:

Hay dos formas de transferir valores en la interfaz, GET y POST.

1. Los caracteres chinos que pasan por POST no causarán problemas confusos

  1. La página JSP tiene pageEncoding = "UTF-8" para establecer la codificación;
  2. El filtro en web.xml establecerá la codificación de caracteres y realizará la operación request.setCharacterEncoding ("utf-8").

Dos, método GET

1. Generación y resolución de códigos ilegibles

La mayoría de los caracteres ilegibles chinos se generan mediante el método GET, porque el método GET tiene una operación de decodificación automática. Equivalente a ejecutar código:

                  URLDecoder.decode("%E6%B1%89%E5%AD%97", "编码方式")

En el archivo de configuración de Tomcat server.xml, si el método de decodificación no está configurado, se decodificará de acuerdo con la codificación predeterminada ISO-8859-1. Consulte la documentación de tomcat para obtener más detalles.

URIEncoding: Esto especifica la codificación de caracteres utilizada para decodificar los bytes URI, después de% xx decodificar la URL. Si no se especifica, se utilizará ISO-8859-1.

Es decir, el servidor ejecutará URLDecoder.decode ("% E6% B1% 89% E5% AD% 97", "ISO-8859-1") de forma predeterminada, que es codificación UTF-8, descodificación ISO y caracteres confusos. aparecerá. Entre ellos,% E6% B1% 89% E5% AD% 97 es el resultado de la interfaz encodeURI ("caracteres chinos"), y esta función utiliza codificación UTF-8.

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />

          Por lo tanto, la configuración de URIEncoding = "UTF-8" debe agregarse aquí para evitar caracteres confusos.

2. ¿Signo de interrogación cuando se distorsiona?

El encodeURI utilizado en el procesamiento frontal de caracteres chinos está codificado de acuerdo con UTF-8, y este método de codificación es que un carácter chino ocupa 3 bytes.

Los parámetros obtenidos por solicitud son decodificados por ISO-8859-1 por defecto y se mostrarán cuando se encuentren. Es tres veces el número de caracteres chinos.

3. El problema confuso también se puede resolver codificando la URL dos veces

a. Codifique "caracteres chinos" una vez mediante encodeURI o encodeURIComponent, y obtendrá la cadena% E6% B1% 89% E5% AD% 97 (6 bytes). Esta cadena está codificada en UTF-8. Si usa ISO en esta vez decodificación -8859-1, los caracteres correspondientes a campos como "E6" no se pueden encontrar en la tabla de codificación ISO-8859-1, por lo que hay 6 signos de interrogación.
           b. En la segunda codificación, equivale a codificar caracteres no chinos% E6% B1% 89% E5% AD% 97. En este momento, el servidor obtendrá% E6% B1% 89% independientemente del método de decodificación Se pueden restaurar correctamente los caracteres E5% AD% 97.
           c. De esta manera, al decodificar el carácter mediante UTF-8, puede obtener "caracteres chinos".
                Es decir, se ejecuta el método URLDecoder.decode ("% E6% B1% 89% E5% AD% 97", "UTF-8").


 

 

 

Supongo que te gusta

Origin blog.csdn.net/H517604180/article/details/84329144
Recomendado
Clasificación