Bei der URL-Codierung wird "&" (kaufmännisches Und) als "& amp;" HTML-Entität

293

Ich codiere eine Zeichenfolge, die in einer URL (über GET) übergeben wird. Aber wenn ich verwende escape, encodeURIoder encodeURIComponent, &mit ersetzt werden %26amp%3B, aber ich will es mit ausgetauscht werden %26. Was mache ich falsch?

dododedodonl
quelle
Woher kommt die Saite? Können Sie den Code veröffentlichen, den Sie bisher haben?
Andy E
1
&ist der richtige Weg, um dem kaufmännischen Und in einem HTML-Kontext zu entkommen ... woher kommt Ihre Quelle? und was ist das Ziel? Es kann beispielsweise besser sein, dies serverseitig durchzuführen.
Nick Craver
Ich greife etwas aus dem HTML-Body (und das ist HTML-codiert (also gibt es & amp; ich merke es jetzt)) und muss es in einer URL übergeben ... Also muss ich das HTML dekodieren (aber wie?) en dann codieren Sie die Zeichenfolge (mit encodeURIComponent) ...
dododedodonl
2
fand es ... Ich habe in jquery .html () verwendet, nicht .text () ... dumm (A)
dododedodonl
1
jQuery .html () Karten zum innerHTML- Eigenschaft, so dass die Frage ist , wie ich in meiner Antwort sagte :-)
Andy E

Antworten:

438

Ohne Ihren Code zu sehen, ist es schwierig, etwas anderes als einen Stich in die Dunkelheit zu beantworten. Ich würde vermuten, dass die Zeichenfolge, die Sie an encodeURIComponent () übergeben , was die richtige Methode ist, aus dem Ergebnis des Zugriffs auf die innerHTML- Eigenschaft stammt. Die Lösung besteht darin, stattdessen den Eigenschaftswert innerText / textContent abzurufen :

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

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

Ist dies nicht der Fall, können Sie die HTML-Entität mit der replace () -Methode ersetzen:

encodeURIComponent(str.replace(/&/g, "&"));
Andy E.
quelle
94

Wenn Sie dies buchstäblich getan haben:

encodeURIComponent('&')

Dann ist das Ergebnis %26, Sie können es hier testen . Stellen Sie sicher, dass die Zeichenfolge, die Sie codieren, gerecht ist & und nicht &von Anfang an ... andernfalls wird sie korrekt codiert, was wahrscheinlich der Fall ist. Wenn Sie aus irgendeinem Grund ein anderes Ergebnis benötigen, können Sie dies .replace(/&/g,'&')vor der Codierung tun .

Nick Craver
quelle
3
... das ist wahrscheinlich sein Problem.
Pekka
2

Es gibt HTML- und URI-Codierungen. &wird & in HTML codiert, während %26es sich &um eine URI-Codierung handelt .

Bevor Sie Ihre Zeichenfolge mit einem URI codieren, möchten Sie möglicherweise eine HTML-Decodierung und anschließend eine URI-Codierung durchführen :)

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

Ergebnis %26AndOtherHTMLEncodedStuff

Hoffe das spart dir etwas Zeit

Matas Vaitkevicius
quelle