utf8 escape encodeuri decodeuri javascript urlencode

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