Как добавить закодированные параметры в URL, используя JavaScript? - PullRequest
1 голос
/ 30 августа 2011

У меня есть поле ввода для поиска, и я добавляю его данные в URL после "#", например, http://test.cl.com/#pqr xyz (используя хэш, чтобы избежать перезагрузки страницы). Он работает нормально, но мои данные не кодируются, так как пространство не заменяется + или %20. Поэтому перед добавлением я использую функцию encodeURI, а затем добавляю это значение в URL, но все еще в адресной строке космический персонаж. Перед назначением я проверил, что добавляю правильное значение (предупреждая prq%20xyz).

Токовый выход: http://test.cl.com/#pqr xyz Требуемый выход: http://test.cl.com/#pqr+xyz

Пожалуйста, помогите мне выяснить причину проблемы. Спасибо!

<html>
<head>
<title>Test</title>
    <script type="text/javascript" src="jquery1.6.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){

        $('#btn').click(function(){
             var url = encodeURI("pqr xyz");
              alert(url); // shows encoded value
             window.location.hash = (url);  
         });
    });
    </script>
</head>
<body>        

        <h3>sample app</h3>
        <button id="btn">
            append
        </button>


</body>

Ответы [ 3 ]

1 голос
/ 30 августа 2011

Взгляните на следующий пост.Он имеет тестовую форму, где вы можете увидеть выходные данные каждой из функций кодирования Javascript:

http://www.the -art-of-web.com / javascript / escape /

Также хорошо обсуждается техника.

Приветствия,

www.greyhound-computing.com

1 голос
/ 30 августа 2011

Полагаю, вы запустили свой тест на Firefox.Современные версии Firefox не кодируют символ пробела в URL-адресе хеша до %20 или +.

Вы можете просто выполнить тестирование, просто добавив хеш с пробелами к любому URL.

Другие браузеры автоматически преобразуют пространство в %20, но не современный Firefox.И в этом нет ничего плохого, и это не должно создавать проблем в вашем приложении.

Если вы декодируете хеш с помощью decodeURI или decodeURIComponent - пробел будет правильно декодирован, поэтому приложение будет вести себя так же, как с %20.

Худший случай - символ +, который не расшифровывается обратно в пробел decodeURI.

1 голос
/ 30 августа 2011

Тот факт, что в адресной строке отображаются незакодированные символы, не означает, что ваши данные не закодированы должным образом.Firefox (например) может и будет пытаться декодировать символы в адресе URL, чтобы сделать его более читабельным (я полагаю).

Даже если вы введете некоторые закодированные символы вручную, например, перейдите к:

http://google.com?opt=test%20me%20or%20not

URL, видимый в адресной строке, будет «декодирован» - вы не увидите% 20.

РЕДАКТИРОВАТЬ: получить знак плюс вместо% 20 вы можетеЗамените пробелы вручную перед использованием encodeURI:

var url = encodeURI("pqr xyz".replace(/\s/, '+'));
...