2010-08-22 36 views
283

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 %26amp%3B, pero quiero que se reemplace por %26. ¿Qué estoy haciendo mal?La codificación URL ve "&" (ampersand) como "&" entidad HTML

+0

dónde viene la cuerda ¿de? ¿Puedes publicar el código que tienes hasta ahora? –

+1

'&' es la forma adecuada de escapar del ampersand en un contexto HTML ... ¿de dónde viene su fuente? y cual es el destino? Puede ser mejor hacer esto en el lado del servidor, por ejemplo. –

+0

Grap algo del cuerpo HTML (y que está codificado en HTML (entonces, ahora me doy cuenta de &)) y tengo que pasarlo en una URL ... Entonces, necesito decodificar el html (¿pero cómo?) es luego codificar la cadena (con encodeURIComponent) ... – dododedodonl

Respuesta

422

Sin ver su código, es difícil responder, salvo una puñalada en la oscuridad. Supongo que la cadena que está pasando a encodeURIComponent(), que es el método correcto de usar, proviene del resultado de acceder a la propiedad innerHTML. La solución es conseguir que el/textContent valor de la propiedad innerText 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, se puede utilizar el replace() método para reemplazar la entidad HTML:

encodeURIComponent(str.replace(/&/g, "&")); 
91

Si lo hizo, literalmente esto:

encodeURIComponent('&') 

entonces el resultado es %26, you can test it here. Asegúrese de que la cadena que está codificando es solo& y no & para empezar ... de lo contrario, está codificando correctamente, que es lo que ocurre. Si necesita un resultado diferente por alguna razón, puede hacer un .replace(/&/g,'&') antes de la codificación.

+3

... ese es probablemente su problema. –

2

Hay codificaciones HTML y URI. & es &encoded in HTML mientras que %26 es & en URI encoding.

Así que antes de codificar la cadena de URI es posible que desee a HTML decodificación y luego URI codificarlo :)

var div = document.createElement('div'); 
div.innerHTML = '&AndOtherHTMLEncodedStuff'; 
var htmlDecoded = div.firstChild.nodeValue; 
var urlEncoded = encodeURIComponent(htmlDecoded); 

resultado %26AndOtherHTMLEncodedStuff

Hope esto le ahorra un tiempo

Cuestiones relacionadas