La codifica URL vede "&" (e commerciale) come "& amp;" Entità HTML


293

Sto codificando una stringa che verrà passata in un URL (tramite GET). Ma se uso escape, encodeURIo encodeURIComponent, &verrà sostituito con %26amp%3B, ma voglio che venga sostituito con %26. Che cosa sto facendo di sbagliato?


Da dove viene la stringa? Puoi pubblicare il codice che hai finora?
Andy E

1
&è il modo corretto di sfuggire alla e commerciale in un contesto HTML ... da dove proviene la tua fonte? e qual è la destinazione? Potrebbe essere meglio fare questo lato server per esempio.
Nick Craver

Prendo qualcosa dal corpo HTML (e che è codificato in HTML (quindi, c'è & amp; lo capisco ora)) e devo passarlo in un URL ... Quindi, devo decodificare l'html (ma come?) it quindi codifica la stringa (con encodeURIComponent) ...
dododedodonl

2
trovato ... l'ho usato in jquery .html (), non .text () ... stupid (A)
dododedodonl

1
Il .html () di jQuery è associato alla proprietà innerHTML , quindi il problema è come ho detto nella mia risposta :-)
Andy E

Risposte:


438

Senza vedere il tuo codice, è difficile rispondere se non una pugnalata nel buio. Immagino che la stringa che stai passando a encodeURIComponent () , che è il metodo corretto da usare, provenga dal risultato dell'accesso alla proprietà innerHTML . La soluzione è invece ottenere il valore della proprietà innerText / textContent :

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

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

In caso contrario, è possibile utilizzare il metodo replace () per sostituire l'entità HTML:

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

94

Se hai fatto letteralmente questo:

encodeURIComponent('&')

Quindi il risultato è %26, puoi provarlo qui . Assicurati che la stringa che stai codificando sia giusta & e non &iniziare ... altrimenti è codificata correttamente, il che è probabilmente il caso. Se per qualche motivo hai bisogno di un risultato diverso, puoi eseguire una .replace(/&/g,'&')prima della codifica.


3
... questo è probabilmente il suo problema.
Pekka,

2

Esistono codifiche HTML e URI. &è & codificato in HTML mentre %26è &in codifica URI .

Quindi prima dell'URI che codifica la tua stringa potresti voler decodificare HTML e poi URI codificarla :)

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

risultato %26AndOtherHTMLEncodedStuff

Spero che questo ti faccia risparmiare un po 'di tempo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.