javascript - escape - La codificación URL ve "&"(ampersand) como "& amp;" entidad HTML
javascript url format (3)
Estoy codificando una cadena que se pasará en una URL (a través de GET). Pero si uso escape
, encodeURI
o encodeURIComponent
, se reemplazará con %26
encodeURIComponent
%26amp%3B
, pero quiero que se reemplace con %26
. ¿Qué estoy haciendo mal?
Hay codificaciones HTML y URI. &
está &
codificado en HTML, mientras que %26
es &
en codificación URI .
Así que antes de que URI codifique su cadena, es posible que desee decodificar HTML y luego codificar URI :)
var div = document.createElement(''div'');
div.innerHTML = ''&AndOtherHTMLEncodedStuff'';
var htmlDecoded = div.firstChild.nodeValue;
var urlEncoded = encodeURIComponent(htmlDecoded);
result %26AndOtherHTMLEncodedStuff
Espero que esto te ahorre tiempo
Si hiciste literalmente esto:
encodeURIComponent(''&'')
Entonces el resultado es %26
, puedes probarlo aquí . Asegúrese de que la cadena que está codificando es solo &
y no &
para empezar ... de lo contrario, se está codificando correctamente, lo que es probable que sea el caso. Si necesita un resultado diferente por alguna razón, puede hacer un .replace(/&/g,''&'')
antes de la codificación.
Sin ver su código, es difícil responder más que una puñalada en la oscuridad. Supongo que la cadena que está pasando a encodeURIComponent () , que es el método correcto a utilizar, proviene del resultado de acceder a la propiedad innerHTML . La solución es obtener el valor de la propiedad innerText / textContent en su lugar:
var str,
el = document.getElementById("myUrl");
if ("textContent" in el)
str = encodeURIComponent(el.textContent);
else
str = encodeURIComponent(el.innerText);
Si ese no es el caso, puede usar el método replace () para reemplazar la entidad HTML:
encodeURIComponent(str.replace(/&/g, "&"));