Red de conocimiento informático - Espacio del host - ¿Se decodifican todas las URL de las páginas web una vez?

¿Se decodifican todas las URL de las páginas web una vez?

Hay dos situaciones en las que aparecen caracteres chinos en la barra de direcciones. Una es cuando aparecen caracteres chinos en la parte de la ruta de la URL y la otra es cuando aparecen caracteres chinos en la parte de parámetros de la URL.

En el segundo caso, los parámetros deben pasarse después de codificar y decodificarse cuando se reciben.

Hay tres métodos comúnmente utilizados para codificar en js: escape(), encodeURI() y

encodeURIComponent(). escape () se usa a menudo cuando el formato de codificación de la página enviada y la página de procesamiento son los mismos (por ejemplo, ambos son GB2312. El uso de encodeURI () y encodeURIComponent () es básicamente el mismo. encodeURIComponent() también maneja caracteres especiales como "?". Los caracteres están codificados.

La primera vez que encontré parámetros chinos, utilicé encodeURI() para codificarlos. Después de pasarlos, descubrí que había un problema con la decodificación, por lo que pensé que el método de codificación podría usarse incorrectamente. Entonces utilicé el método escape (). En este momento, descubrí que se lanzó una excepción isHexDigit durante la decodificación. Con la ayuda de Baidu para buscar la excepción isHexDigit, descubrí que el método escape () causó la excepción. Al mismo tiempo, aprendí algunos principios sobre cómo pasar la dirección del navegador en la barra de direcciones del navegador. un carácter de escape, y el navegador tratará % como un carácter de escape. La codificación entre % y % se extrae y decodifica, y luego se pasa a la página de procesamiento, que luego la decodifica nuevamente. A partir de esto, pensé que es correcto usar siempre el método encodeURI, pero es necesario usar el método encodeURI dos veces, como encodeURI(encodeURI("Chinese")); ,

La segunda vez es codificar % en %xy, y % se codifica en %. Todo el proceso de transferencia de parámetros debe ser aproximadamente el siguiente: la página enviada se codifica usando encodeURI (encodeURI ("chino")), y el resultado final de la codificación% xy se pasa al proceso de procesamiento de la página y el navegador obtiene la URL. dirección (nota

método openModelDialog, el navegador no puede obtener la codificación del parámetro) y decodificarla en %xy, y luego pasar %xy a la página de procesamiento. La página de procesamiento utiliza

URLDecoder. .decode(request.getParameter("Nombre del parámetro") ,"UTF-8");Decodificación completa.

Resumen:

1. Cuando aparecen caracteres chinos en la parte de la ruta URL, no se requiere codificación ni decodificación;

2.

3. En el formulario modal abierto por openModelDialog(), no hay forma de usar request.getParameter para obtener correctamente los parámetros;

El cliente y el servidor pueden usar filtros para resolverlo. Problemas de codificación de caracteres al transmitir datos, pero el filtro solo puede resolver los datos enviados en modo de publicación. Para el método get, puede usar encodeURI(encodeURI("Chinese")) dos veces y usar URLDecoder.decode("Chinese",

"UTF-8");

I También encontré este problema al usar Ajax para verificar datos hoy. Aunque la página, la clase y el contenedor web unificaron la codificación de caracteres, los datos enviados todavía estaban confusos, por lo que utilicé el método de codificación encodeURI () dos veces y el problema confuso se resolvió. .

En la página:

/exportExcel.topinfo?ls="+encodeURI(encodeURI(_tmplsgx))+"&zt="+encodeURI(encodeURI(_tmpzt))

En acción

String ls=request.getParameter("ls");

ls = new String(ls.getBytes("iso-8859-1") , "utf-8");

ls = java.net.URLDecoder.decode(ls,"UTF-8");

Esto resolverá el código confuso.