ilustrar
La función decodeURI() puede decodificar el URI codificado por la función encodeURI()
La función decodeURIComponent() puede decodificar el URI codificado por la función encodeURIComponent()
La diferencia entre los dos - parámetros
decodeURI(URIstring) //URIstring 一个字符串,含有要解码的 URI 或其他要解码的文本。
decodeURIComponent(URIstring) //URIstring 一个字符串,含有编码 URI 组件或其他要解码的文本。
// 区别:encodeURIComponent和decodeURIComponent可以编码和解码URI特殊字符(如#,/,¥等),而decodeURI则不能
encodeURIComponent('#')
"%23"
decodeURI('%23')
"%23"
decodeURIComponent('%23')
"#"
encodeURI('#')
"#"
Se puede ver que encodeURI y decodeURI no tienen la capacidad de codificar y decodificar los caracteres especiales de URI. En proyectos reales, generalmente necesitamos empalmar algunos parámetros en la barra de direcciones en la forma de obtener la solicitud, pero si hay caracteres como # , /, & en los parámetros, debe usar decodeURIComponent, de lo contrario, estos caracteres especiales harán que recibamos errores de parámetros
假如我们要传一个code字段到http://www.xxx.com,值为20180711#abc
var codeVal = encodeURI('20180711#abc');
var url = 'http://www.xxx.com?code=' + codeVal;
console.log(url);
http://www.xxx.com?code=20180711#abc
http://www.xxx.com接收参数
location.search //"?code=20180711";
decodeURI("?code=20180711") //"?code=20180711"
En este momento, el parámetro de código que obtuvimos es obviamente incorrecto y está truncado por el carácter especial #. Veamos el método decodeURIComponent :
var codeVal = encodeURIComponent('20180711#abc');
var url = 'http://www.baidu.com?code=' + codeVal;
url;
"http://www.baidu.com?code=20180711%23abc"
http://www.xxx.com接收参数
location.search //"?code=20180711%23abc"
decodeURIComponent("?code=20180711%23abc") //"?code=20180711#abc"
这样子看来参数是不是正确了呢?
Diferenciar las extensiones de uso en uso
encodeURIComponent(url) 函数
定义和用法
encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。
语法
encodeURIComponent(URIstring)
Descripción de parámetros
Se requiere cadena URI. Una cadena que contiene componentes URI u otro texto para codificar.
valor de retorno
Una copia de URIstring con algunos caracteres reemplazados por secuencias de escape hexadecimales.
ilustrar
Este método no codifica letras y números ASCII, ni codifica estos signos de puntuación ASCII: - _ . ! ~ * ' ( ) .
Otros caracteres (como: ;/?:@&=+$,# signos de puntuación utilizados para separar los componentes de URI) se reemplazan por una o más secuencias de escape hexadecimales.
función decodeURIComponent(url)
Definición y uso
La función decodeURIComponent() decodifica una cadena como un componente URI.
gramática
decodeURIComponent(URIcadena)
Descripción de parámetros
Se requiere cadena URI. Una cadena que contiene componentes URI u otro texto para decodificar.
valor de retorno
Una copia de la cadena URI con algunos caracteres convertidos a los caracteres ASCII correspondientes mediante secuencias de escape hexadecimales.
Hoy en día, cuando se usa la publicación jQuery de js para pasar datos de cadenas empalmadas al servlet de fondo, algunos caracteres especiales como "+, @, #, $, %, &, ?, /" no se pueden pasar a la salida de fondo .
Por ejemplo:
var str1="a+aa+bb@kk$dd";
var data="data1"="+str1+"+"&"+"data2"+str2;
Si no se realiza la codificación, los caracteres +, @ y $ no se generarán normalmente si se usa la publicación jQuery de js o window.self.location para transferir datos al fondo.
Ortografía correcta:
var str1=encodeURIComponent("a+aa+bb@kk$dd");
var data="data1"="+str1+"+"&"+"data2"+str2;
Cuando se usa window.self.location para transferir datos al fondo, hay un caso especial, que es el método de decodificación en Java :
El problema de que JavaScript no se puede decodificar en segundo plano después de codificarse con encodeURIComponent.
Actualmente escrito como:
window.self.location="index.jsp?data="+encodeURIComponent(url);
El código procesado por java es:
searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");
No creo que sea un problema, debería estar bien si lo compongo uno por uno. Pero todavía hay personajes distorsionados.
razón:Resulta que al asignar un valor a los datos en el programa java en segundo plano, ya ha utilizado una decodificación, pero el resultado de la decodificación sigue siendo incorrecto. Así que nosotros
Puede realizar dos operaciones de codificación en la página, de modo que la automática en segundo plano se pueda compensar una vez y luego usar
data=java.net.URLDecoder.decode(data,"UTF-8"); simplemente decodifique una vez.
código correcto
JavaScript:
window.self.location="index.jsp?data="+encodeURIComponent(encodeURIComponent(url));
java:
searchtext=java.net.URLDecoder.decode(data,"UTF-8");
Además, hay otra forma de codificar JavaScript una vez, y simplemente cambiar la idea cuando Java se procesa en segundo plano.
codigo java:
String s = new String(request.getParameter("data").getBytes("ISO8859-1"), "UTF-8");