Подтвердить что ты не робот

Javascript encodeURIComponent() не кодирует пробелы

У меня есть форма с текстовым вводом с id txtPlace, которые будут вводить пользователи, которые будут переданы серверу в качестве запроса url. Я пытаюсь использовать encodeURIComponent(), но это не кодирование пробелов. Здесь мой упрощенный код

<div class="searchBoxRow">
  <input type="text" id="txtPlace" size="55" placeholder="Enter place to search"/>
  <a href="#" id="btnSearch">Search</a> 
</div>

Вот мой javascript

<script type="text/javascript">
  $(function () {
     $('#btnSearch').on('click', function (e) {
        e.preventDefault;
        var place = encodeURIComponent($('#txtPlace').val());
        var url = "http://example.com?place=" + place;
        document.location.href = url;
     });
  });    
</script>

Если пользователь набирает ACME Co., New York, NY, сгенерированный URL-адрес

http://example.com?place=ACME Co.% 2CNew York% 2C NY

Смотрите, что пробелы не кодируются? Я даже попытался добавить place = place.replace(/\s/g, '+'), но, похоже, это не работает после кодирования. Что я делаю не так? Благодарим за помощь.

Обновление:

Поражение Firefox! Обнаружено, что пробелы были правильно закодированы, но Firefox не отображает пробелы в кодировке, даже если они есть. Протестировано в Internet Explorer 10 и Google Chrome, и оба они отображают пробелы в своем закодированном формате. Спасибо Адаму за скрипку http://jsfiddle.net/VYDcv/

4b9b3361

Ответ 1

Я не уверен, что вы видите, но encodeURIComponent скрывает символы пробела.

Посмотрите эту скрипку на основе вашего кода: http://jsfiddle.net/VYDcv/

Если вы наберете "Hello world", он предупредит вас о замене пространства на %20.

Результаты оповещения: http://example.com?place=Hello%20World

Когда вы устанавливаете свой браузер document.location.href, он может менять %20 обратно на пробел в адресной строке, но он скрывается от javascript.

Ответ 2

Это простое решение для меня:

<script type="text/javascript">
  $(function () {
     $('#btnSearch').on('click', function (e) {
        e.preventDefault;
        var place = encodeURIComponent($('#txtPlace').val());
        place=place.replace(" ", "+"); //or .replace(" ", "%20")
        var url = "http://example.com?place=" + place;
        document.location.href = url;
     });
  });    
</script>