Pregunta sobre special-characters, url, javascript – escapando de un personaje especial en un url

5

Estoy usando una url para abrir una página html y estoy enviando datos en la cadena de consulta con la url de la página.

Por ejemplo:abc.html?firstParameter=firstvalue&seconedParameter=seconedvalue

El problema es que sifirstvalue osecondvalue en parámetro contiene caracteres especiales como#,(,),%,{, entonces mi url no esta construyendo bien. En este caso la url no está validando. Estoy haciendo todo esto enjavascript. ¿Puede algún cuerpo por favor ayudarme esto?

Tu respuesta

2   la respuesta
3

res reservados especificados tanto en RFC 1738 como en RFC 3986, debe usar una combinación de encodeURIComponent, escape y un reemplazo para el asterisco ('*') como este:

encoded = encodeURIComponent( parm ).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");

[Explicación] Mientras que RFC 1738: Localizadores de recursos uniformes (URL) especifica que los caracteres *,!, ', (Y) pueden quedar sin codificar en la URL,

Por lo tanto, solo los caracteres alfanuméricos, los caracteres especiales "$ -_. +! * '()," Y los caracteres reservados utilizados para sus fines reservados pueden usarse sin codificar dentro de una URL.

RFC 3986, páginas 12-13, establece que estos caracteres especiales están reservados como subdelimitadores.

reserved = gen-delims / sub-delims

gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"

sub-delims = "!" / "$19$quot; / "&" / "'" / "(" / ")" / "*" / "+" / "," / "; / "="

La función de escape () ha quedado en desuso pero se puede usar para codificar en URL el signo de exclamación, comillas simples, paréntesis izquierdo y paréntesis derecho. Y dado que existe cierta ambigüedad sobre si un asterisco debe estar codificado en una URL, y no se pierde nada con la codificación, se puede codificar explícitamente usando algo como la llamada a la función replace (). [Tenga en cuenta que la función escape () se pasa como laSegundo parámetro de la primera llamada a la función de reemplazo (). Tal como se usa aquí, reemplazar llama a la función escape () una vez por cada carácter especial coincidente de!, ', (O), y escape simplemente devuelve la' secuencia de escape 'para que ese personaje vuelva a reemplazarse, lo que vuelve a ensamblar los caracteres escapados con el otro fragmentos.]

Ver también'https://stackoverflow.com/questions/6533561/urlencode-the-asterisk-star-character'

Además, aunque algunos sitios web incluso han identificado el asterkisk (*) como un carácter reservado en RFC3986, no lo incluyen ensu herramienta de codificación de componentes de URL.

Parms de URL sin codificar:

parm1=this is a test of encoding [email protected]#$%^&*()'
parm2=note that * is not encoded

Parms codificados de URL:

parm1=this+is+a+test+of+encoding+%21%40%23%24%25%5E%26*%28%29%27
parm2=note+that+*+is+not+encodeds+not+encoded
15

Tienes 3 opciones:

escape() will not encode: @*/+

encodeURI() will not encode: [email protected]#
escape() will not encode: @*/+

encodeURI() will not encode: [email protected]#$&*()=:/,;?+'

encodeURIComponent() will not encode: ~!*()'
amp;*()=:/,;?+' encodeURIComponent() will not encode: ~!*()'

Pero en su caso, si desea pasar un url a un parámetro GET de otra página, debe usar escape o encodeURIComponent, pero no encodeURI.

Gracias a yogesh, funcionó. ARV
Gracias, yogesh, por favor, ¿puedes decirme cómo usar estos métodos en javascript? ¿Puedo tener que llamar a estos métodos como URL.escape (); ARV
subrayar no está funcionando Animay
escape es obsoleto. No lo uses. Quentin

Preguntas relacionadas