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
risposta
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, "&"));
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.
... questo è probabilmente il suo problema. –
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
dove viene la stringa venire a partire dal? Puoi pubblicare il codice che hai finora? –
'&' è 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. –
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