Trochę wyjaśnienia, co to %2520
jest:
Wspólny znak spacji jest kodowany tak, %20
jak sam zauważyłeś. %
Znak jest zakodowany jako %25
.
Sposób, w jaki się %2520
to, gdy adres URL ma już %20
w nim, i dostaje urlencoded znowu, który przekształca %20
się %2520
.
Czy jesteś (lub jakikolwiek framework, którego możesz używać) podwójne kodowanie znaków?
Edycja:
Rozwijam nieco ten temat, szczególnie dla linków LOKALNYCH . Zakładając, że chcesz połączyć się z zasobem C:\my path\my file.html
:
- jeśli podasz tylko lokalną ścieżkę do pliku, przeglądarka powinna zakodować i zabezpieczyć wszystkie podane znaki (w powyższym, powinieneś nadać mu spacje, jak pokazano, ponieważ
%
jest to prawidłowy znak nazwy pliku i jako taki zostanie zakodowany) podczas konwersji do właściwego adresu URL (patrz następny punkt).
- jeśli podasz adres URL z
file://
protokołem, w zasadzie stwierdzasz, że podjąłeś wszelkie środki ostrożności i zakodowałeś to, co wymaga zakodowania, resztę należy traktować jako znaki specjalne. W powyższym przykładzie powinieneś więc podać file:///c:/my%20path/my%20file.html
. Oprócz poprawiania ukośników klienci nie powinni tutaj kodować znaków.
UWAGI:
- Kierunek ukośnika
/
- w adresach URL używane są ukośniki w przód , \
w ścieżkach systemu Windows w odwrotne ukośniki , ale większość klientów będzie współpracować z obydwoma, konwertując je na właściwy ukośnik.
- Ponadto po nazwie protokołu znajdują się 3 ukośniki, ponieważ po cichu odnosisz się do bieżącej maszyny zamiast do zdalnego hosta (pełna ścieżka nieskrócona byłaby
file://localhost/c:/my%20path/my%file.html
), ale znowu większość klientów będzie działać bez części hosta (tj. Tylko dwa ukośniki ) zakładając, że masz na myśli maszynę lokalną i dodając trzeci ukośnik.
http://mysite/test & that... If I use
UrlEncode`, na które się zmienia,http://mysite/test%20&%20that
ale chcę również&
zmienić na% 26, więc jest to mysite / test% 20% 26% 20that `Jak mogę to zrobić?Z jakiegoś - być może ważnego - powodu adres URL został zakodowany dwukrotnie.
%25
jest%
znakiem urlencoded . Tak więc oryginalny adres URL wyglądał następująco:Potem został raz zakodowany jako urlenkod:
i dwukrotnie:
Nie powinieneś więc robić urlencoding - w twoim przypadku - ponieważ wydaje się, że inne komponenty już to robią . Użyj po prostu spacji
źródło
Kiedy próbujesz odwiedzić lokalną nazwę pliku przez przeglądarkę Firefox, musisz wymusić
file:\\\
protokół ( http://en.wikipedia.org/wiki/File_URI_scheme ), w przeciwnym razie firefox zakoduje Twoje miejsce DWUKROTNIE. Zmień fragment kodu HTML z tego:do tego:
albo to:
Następnie firefox jest powiadamiany, że jest to lokalna nazwa pliku i poprawnie renderuje obraz w przeglądarce, poprawnie kodując ciąg.
Pomocny link: http://support.mozilla.org/en-US/questions/900466
źródło
Poniższy fragment kodu rozwiązał mój problem. Pomyślałem, że to może być przydatne dla innych.
Raczej używam default,
encodeURIComponent
moja pierwsza linia kodu konwertuje wszystkospaces
nahyphens
użycie wzorca regex,/\s\g
a następna linia po prostu odwraca, tj. Konwertuje wszystko zhyphens
powrotem naspaces
użycie innegoregex pattern /-/g
. Tutaj/g
jest faktycznie odpowiedzialny zafinding all
dopasowywanie znaków.Kiedy wysyłam tę wartość do mojego wywołania Ajax, przechodzi ona jako
normal spaces
lub po prostu%20
iw ten sposób się pozbywadouble-encoding
.źródło
Spróbuj tego?
encodeURIComponent('space word').replace(/%20/g,'+')
źródło