Ein bisschen erklären, was das %2520
ist:
Das Common Space-Zeichen wird so codiert, %20
wie Sie es selbst notiert haben. Das %
Zeichen ist codiert als %25
.
Die Art und Weise, wie Sie erhalten, %2520
ist, wenn Ihre URL bereits eine enthält %20
und erneut urlencodiert wird, wodurch die %20
zu transformiert wird %2520
.
Sind Sie (oder ein Framework, das Sie möglicherweise verwenden) doppelt codierende Zeichen?
Bearbeiten:
Dies etwas erweitern, insbesondere für lokale Links. Angenommen, Sie möchten eine Verknüpfung zur Ressource herstellen C:\my path\my file.html
:
- Wenn Sie nur einen lokalen Dateipfad angeben, wird vom Browser erwartet, dass er alle angegebenen
%
Zeichen beim Konvertieren codiert und schützt (oben sollten Sie Leerzeichen wie gezeigt angeben, da es sich um ein gültiges Dateinamenzeichen handelt und es als solches codiert wird) zu einer richtigen URL (siehe nächster Punkt).
- Wenn Sie eine URL mit dem
file://
Protokoll angeben, geben Sie im Grunde an, dass Sie alle Vorsichtsmaßnahmen getroffen und codiert haben, was codiert werden muss. Der Rest sollte als Sonderzeichen behandelt werden. Im obigen Beispiel sollten Sie daher angeben file:///c:/my%20path/my%20file.html
. Abgesehen von der Korrektur von Schrägstrichen sollten Clients hier keine Zeichen codieren.
ANMERKUNGEN:
- Schrägstrichrichtung - Schrägstriche
/
werden in URLs und Schrägstriche \
in Windows-Pfaden verwendet. Die meisten Clients arbeiten jedoch mit beiden, indem sie sie in den richtigen Schrägstrich konvertieren.
- Darüber hinaus gibt es nach dem Protokollnamen drei Schrägstriche, da Sie sich stillschweigend auf den aktuellen Computer anstatt auf einen Remote-Host beziehen (der vollständige, nicht abgekürzte Pfad wäre
file://localhost/c:/my%20path/my%file.html
), aber auch hier funktionieren die meisten Clients ohne den Host-Teil (dh nur zwei Schrägstriche) ) mit der Annahme, dass Sie den lokalen Computer meinen und den dritten Schrägstrich hinzufügen.
http://mysite/test & that... If I use
UrlEncode, zu dem es sich ändert,http://mysite/test%20&%20that
aber ich möchte auch, dass der&
zu% 26 geändert wird, also ist es mysite / test% 20% 26% 20that `Wie kann ich das tun?Aus irgendeinem - möglicherweise gültigen - Grund wurde die URL zweimal codiert.
%25
ist das urlencodierte%
Zeichen. Die ursprüngliche URL sah also so aus:Dann wurde es einmal urlencodiert:
und zweimal:
Sie sollten also - in Ihrem Fall - keine Urlencodierung durchführen, da andere Komponenten dies bereits für Sie zu tun scheinen . Verwenden Sie einfach ein Leerzeichen
quelle
Wenn Sie versuchen, einen lokalen Dateinamen über den Firefox-Browser aufzurufen, müssen Sie das
file:\\\
Protokoll erzwingen ( http://en.wikipedia.org/wiki/File_URI_scheme ). Andernfalls codiert Firefox Ihren Speicherplatz ZWEIMAL. Ändern Sie das HTML-Snippet von diesem:dazu:
oder dieses:
Dann wird Firefox benachrichtigt, dass dies ein lokaler Dateiname ist, und es rendert das Bild korrekt im Browser, wobei die Zeichenfolge einmal korrekt codiert wird.
Hilfreicher Link: http://support.mozilla.org/en-US/questions/900466
quelle
Das folgende Codefragment hat mein Problem behoben. Dachte, dies könnte für andere nützlich sein.
Anstatt die Standardeinstellung
encodeURIComponent
zu verwenden, konvertiert meine erste Codezeile allesspaces
in einhyphens
Regex-Muster/\s\g
und die folgende Zeile macht einfach das Gegenteil, dh sie konvertiert alleshyphens
zurück inspaces
eine andereregex pattern /-/g
. Hier/g
ist eigentlich für diefinding all
Übereinstimmung der Zeichen verantwortlich.Wenn ich diesen Wert an meinen Ajax-Aufruf sende, wird er als
normal spaces
oder einfach durchlaufen%20
und somit entferntdouble-encoding
.quelle
Versuche dies?
encodeURIComponent('space word').replace(/%20/g,'+')
quelle