2014-04-01 13 views
6

Mam funkcji javascript:location.href dekoduje URL

function QuoteBeGone(url) 
{ 
    location.href = url; 
} 

URL, który jest przekazywany jest kodowana, np http://www.target.com/page.asp?name%3DJohn%27s%2BProject, ale kiedy nowy załadowaniu strony, adres URL jest niekodowany - http://www.target.com/page.asp?name=John's+Project.

Apostrof psuje stronę, więc chciałbym zachować ją zakodowaną w adresie URL, ale nie wydaje się, aby tak pozostało. Zakładam, że funkcja location.href interpretuje adres URL przed przekazaniem go dalej.

Wszelkie sugestie?

+6

Dlaczego apostrof jest brudząc się strona? – raina77ow

+1

Spróbuj 'encodeURI (str)' – aurbano

+0

Próbowałem już encodeURI, ale ciąg jest już poprawnie zakodowany, więc to nie działa. –

Odpowiedz

2

W miejscu, w którym tworzysz URL, które są przechodzącej do użycia funkcji encodeURIComponent() od wartości dla name

przykład

var john = "John's Project"; 
QuoteBeGone('http://www.target.com/page.asp?name='+encodeURIComponent(john)); 

Jeśli chcesz, by nadal być zakodowane po dekodowania powodu nawigacji do tego adresu URL, a następnie trzeba podwójnego kodowania:

QuoteBeGone('http://www.target.com/page.asp?name='+encodeURIComponent(encodeURIComponent(john))); 
+1

Dzięki Alex. To może zadziałać, a ja to rozważałem, to po prostu nie byłoby łatwe rozwiązanie. Parametr url jest tworzony w innym miejscu w bardzo niechlujnym kodzie. Może warto jednak spróbować. –

+0

@PhillipXT Zdecydowanie warte próby. Cały powód łamania adresu URL w twoim przypadku wynika z tego, że wartości parametrów zapytania zawierają znaki specjalne, które nie są dozwolone w adresach URL. –

+0

To wydaje się działać, ale teraz będę musiał zaktualizować strony, aby odszyfrować tekst tego parametru. Pojawia się na ekranie jako John's + Project, więc potrzebuje trochę dalszego dekodowania. Ale strona nie łamie się, co jest ważną częścią! –

Powiązane problemy