2012-07-04 11 views
6

Próbuję usunąć kodowanie URI z linku, ale decodeURI nie działa w pełni.decodeURI nie działa w pełni

Mój przykład link jest poniżej: /linkout?remoteUrl=http%253a%252f%252fsandbox.yoyogames.com%252fgames%252f171985-h-a-m-heroic-armies-marching

Po uruchomieniu skryptu JavaScript, wygląda to tak:

http%3a%2f%2fsandbox.yoyogames.com%2fgames%2f171985-h-a-m-heroic-armies-marching 

Jak mogę pozbyć się pozostałych nie poprawnych kodów w URI?

Mój kod dekodowania:

var href = $(this).attr('href');   // get the href 
var href = decodeURI(href.substring(19)); // remove the outgoing part and remove the escaping 
$(this).attr('href', 'http://'+href)  // change link on page 
+0

użyj zamiast tego decodeURIComponent() – dano

+0

Proszę również zauważyć, że konstruowanie obiektu "$ (this)" dwukrotnie w jednym przebiegu wejściowym nie jest dobrym pomysłem, więc buforuj go raz na początku funkcji i używając buforowanego obiektu gdy jest to wymagane. –

+1

'$ (this) .attr ('href')' jest po prostu dłuższym, wolniejszym sposobem napisania 'this.href'. – RobG

Odpowiedz

21

url wygląda jak to było zakodowane dwa razy, ja również proponuję użyć decodeURIComponent

decodeURIComponent(decodeURIComponent("http%253a%252f%252fsandbox.yoyogames.com%252fgames%252f171985-h-a-m-heroic-armies-marching")) 

wyniki w: „http: //sandbox.yoyogames. com/games/171985-sza-bohatersko-armie-maszerowanie "

, ale powinieneś sprawdzić, dlaczego masz zakodowany kod url 2-krotnie wcześniej:

+1

Może umieścić swój kod w blokach kodu? +1 –

+0

-.- Zgubiłem się na ponownym wcięciu ... dzięki za podpowiedź :) komentarz +1 –

+0

To nie jest moja strona internetowa, dla której piszę ten kod, jest to dla UserScript. Nie mam pojęcia, dlaczego są podwójne kodowanie URI, zapytam ich kiedyś. – ixchi

1

Właśnie napotkałem tę sytuację w obsłudze ASHX dla czasownika PUT. ASP.NET najwyraźniej koduje mój XML dla mnie, więc moje połączenie z serwerem do HttpUtility.UrlEncode nie było potrzebne. Naprawienie tego przez dwukrotne wywołanie po stronie klienta Javascript decodeURI - zamyka drzwi do stodoły po tym, jak krowy już wyszły, a wysyłany przeze mnie HTTP był naruszeniem protokołu.

bym komentował plus one'd odpowiedź Tobias Krogh, ale nie mam punkty, aby to zrobić ...

Jednak nadal uważam, że ważne jest, aby pamiętać, że brak dyskutowane tutaj nie jest dekodowanie JavaScript ani nic innego - jest to błąd sprawdzania poprawności danych.

Powiązane problemy