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/
Ответы
Ответ 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>