2012-06-01 3 views
15

Я хотел был бы закодировать мой URL, но я хочу преобразовать пробелы в символы плюс.javascript encodeURIComponent и преобразование пробелов в + символы

Это то, что я пытался сделать ...

var search = "Testing this here &"; 

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

Вывод, который Testing%2Bthis%2Bhere%2B%26, но то, что я хотел бы, чтобы это было в Testing+this+here+%26 я попытался заменить пространство с %20, чтобы превратить его в плюс символ, но это, похоже, не работает. Может кто-нибудь сказать мне, что это я делаю неправильно здесь?

ответ

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

Что вы делаете неправильно здесь является то, что первого конвертирования пробелов в плюсы, но encodeURIComponent преобразует плюсы в "%2B".

+0

Это вызовет проблемы, если строка содержит любые «реальные» символы '+'. – user2428118

+4

@ user1419007 Нет, не будет. Все «оригинальные» плюсы преобразуются в ''% 2B'' и сохраняются 'replace'. – MaxArt

+0

Ах, глупый, спасибо. Я выберу вас за лучший ответ, когда наступит 8 минут. – Ian

-2

You're using the wrong function. Используйте escape вместо encodeURIComponent.

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

На самом деле, мы не знаем, почему он хочет преобразовать эту строку. Таким образом, нет никакого способа узнать, что лучше для него. Например, для серверов IBM iSeries «escape» не работает. – MaxArt

+0

На самом деле это в значительной степени касается эстетики URL-адреса, я использую хэштеги для отображения поискового запроса. – Ian

+0

'escape()' [устарело] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape): 'Эта функция была удалена из веб-стандартов. Хотя некоторые браузеры все еще могут его поддерживать, он находится в процессе отбрасывания. Не используйте его в старых или новых проектах. Страницы или веб-приложения, использующие его, могут прерываться в любое время. ' –

Смежные вопросы