2012-06-01 17 views
15

Chciałbym zakodować mój adres URL, ale chcę przekonwertować spacje na symbole plus.kodowanie javascript i zamiana spacji na + symbole

To co próbowałem zrobić ...

var search = "Testing this here &"; 

encodeURIComponent(search.replace(/ /gi,"+")); 

Wyjście od to Testing%2Bthis%2Bhere%2B%26 ale co chciałbym go mieć to Testing+this+here+%26 Próbowałem zastępując przestrzeń %20 aby przekształcić go w plus symbol, ale to nie działało. Czy ktoś może mi powiedzieć, co to jest, robię źle tutaj?

Odpowiedz

34
encodeURIComponent(search).replace(/%20/g, "+"); 

Co robisz źle tutaj jest to, że pierwszy konwertowanie spacji aby plusów, ale potem encodeURIComponent konwertuje plusy do "%2B".

+0

To spowoduje problemy, jeśli ciąg zawiera jakiekolwiek "prawdziwe" znaki '+ '. – user2428118

+4

@ user1419007 Nie, nie będzie. Wszystkie "oryginalne" plusy są konwertowane na '"% 2B "' i przechowywane przez 'replace'. – MaxArt

+0

Ah, głuptasie, dziękuję. Ja wybiorę cię dla najlepszej odpowiedzi, gdy minie 8 minut. – Ian

-2

You're using the wrong function. Użyj escape zamiast encodeURIComponent.

var search = "Testing this here &"; 
console.log(escape(search.replace(/ /gi,"+")));​ 
+0

Właściwie nie wiemy, dlaczego ten ciąg ma zostać przekonwertowany. Więc nie ma sposobu, aby wiedzieć, co jest dla niego najlepsze. W przypadku serwerów IBM iSeries na przykład "escape" nie działa dobrze. – MaxArt

+0

W rzeczywistości jest to całkowicie na estetykę adresu URL, używam hashtags do wyświetlenia kwerendy wyszukiwania – Ian

+0

'escape()' jest [przestarzałe] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape): 'Ta funkcja została usunięta ze standardów internetowych. Chociaż niektóre przeglądarki nadal mogą go obsługiwać, jest ono w trakcie upuszczania. Nie używaj go w starych lub nowych projektach. Strony lub aplikacje internetowe, które go używają, mogą się zepsuć w dowolnym momencie. " –