Codificación y decodificación en JavaScript - encodeURIComponent y decodeURIComponent||decodeURI y encodeURI

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");

Supongo que te gusta

Origin blog.csdn.net/JackieDYH/article/details/129954348
Recomendado
Clasificación