2010-08-22 15 views
283

Sto codificando una stringa che verrà passata in un URL (tramite GET). Ma se uso escape, encodeURI o encodeURIComponent, & verrà sostituito con %26amp%3B, ma voglio che venga sostituito con %26. Che cosa sto facendo di sbagliato?La codifica URL vede "&" (e commerciale) come "&" entità HTML

+0

dove viene la stringa venire a partire dal? Puoi pubblicare il codice che hai finora? –

+1

'&' è il modo corretto di sfuggire alla e commerciale in un contesto HTML ... da dove proviene la tua fonte? e qual è la destinazione? Ad esempio, potrebbe essere meglio fare questo lato server. –

+0

Ho estratto qualcosa dal corpo HTML (e questo è codificato in HTML (quindi, ci sono & che ora realizzo)) e devo passarlo in un URL ... Quindi, ho bisogno di decodificare l'html (ma come?) it poi codifica la stringa (con encodeURIComponent) ... – dododedodonl

risposta

422

Senza vedere il tuo codice, è difficile rispondere a parte una pugnalata al buio. Direi che la stringa che stai passando a cododeURIComponent(), che è il metodo corretto da utilizzare, proviene dal risultato dell'accesso alla proprietà innerHTML interna. La soluzione è quella di ottenere il/textContent valore della proprietà innerText invece:

var str, 
    el = document.getElementById("myUrl"); 

if ("textContent" in el) 
    str = encodeURIComponent(el.textContent); 
else 
    str = encodeURIComponent(el.innerText); 

Se questo non è il caso, è possibile utilizzare il replace() metodo per sostituire l'entità HTML:

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

Se avete fatto letteralmente questo:

encodeURIComponent('&') 

allora il risultato è %26, you can test it here. Assicurati che la stringa da codificare sia & e non & per iniziare ... altrimenti la codifica è corretta, il che è probabilmente il caso. Se hai bisogno di un risultato diverso per qualche motivo, puoi fare un .replace(/&/g,'&') prima della codifica.

+3

... questo è probabilmente il suo problema. –

2

Sono presenti codifiche HTML e URI. & è &encoded in HTML mentre %26 è & in URI encoding.

Quindi, prima di URI codifica la stringa si potrebbe desiderare di HTML decodificare e poi URI codificarlo :)

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

risultato %26AndOtherHTMLEncodedStuff

Spero che questo ti consente di risparmiare tempo

Problemi correlati