Используя Javascript, я хочу создать ссылку на страницу. Параметры страницы находятся в массиве Javascript, который я сериализую в JSON.
Поэтому я хотел бы создать такой URL-адрес:
http://example.com/?data="MY_JSON_ARRAY_HERE"
Как мне экранировать строку JSON (сериализованный массив), чтобы включить ее в качестве параметра в URL-адрес?
Если есть решение, использующее JQuery, мне бы это понравилось.
Примечание: Да, параметры страницы должны быть в массиве, потому что их много. Я думаю, что позже буду использовать bit.ly, чтобы сократить ссылки.
Ответы:
источник
{["
). Есть ли способ кодировать только необходимые символы, чтобы я мог сократить свои URL-адреса?Вы можете использовать
encodeURIComponent
для безопасного URL-кодирования частей строки запроса:или если вы отправляете это как запрос AJAX:
источник
Я хотел сделать то же самое. Проблема для меня заключалась в том, что мой URL становился слишком длинным. Сегодня я нашел решение, используя библиотеку Бруно Жухье jsUrl.js .
Я еще не очень тщательно тестировал. Однако вот пример, показывающий длину символов выходной строки после кодирования одного и того же большого объекта с использованием 3 разных методов:
jQuery.param
JSON.stringify + encodeURIComponent
JSURL.stringify
очевидно, что JSURL имеет наиболее оптимизированный формат для urlEncoding js-объекта.
в ветке https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q показаны тесты для кодирования и синтаксического анализа.
Примечание . После тестирования кажется, что библиотека jsurl.js использует функции ECMAScript 5, такие как Object.keys, Array.map и Array.filter. Следовательно, он будет работать только в современных браузерах (например, 8 и младше). Однако есть полифилы для этих функций, которые сделают его совместимым с большим количеством браузеров.
источник
Использование
encodeURIComponent()
:источник
Я предложу необычную альтернативу. Иногда проще использовать другую кодировку, особенно если вы имеете дело с множеством систем, которые не все обрабатывают детали кодирования URL одинаково. Это не самый распространенный подход, но он может пригодиться в определенных ситуациях.
Вместо URL-кодирования данных вы можете использовать кодировку base64. Преимущество этого заключается в том, что закодированные данные являются очень общими, состоящими только из буквенных символов, а иногда и из завершающих символов
=
. Пример:Массив строк JSON:
Эти данные в URL-кодировке как
data
параметр:То же, в кодировке base64:
Подход base64 может быть немного короче, но, что более важно, он проще. У меня часто возникают проблемы с перемещением данных в кодировке URL между cURL, веб-браузерами и другими клиентами, обычно из-за кавычек, встроенных
%
знаков и т. Д. Base64 очень нейтрален, потому что не использует специальные символы.источник
/
с$
,_
или любой другой символ , который не требует кодирования URL - адрес каждого RFC 3986.Ответ Делана идеален. Просто добавьте к нему - на случай, если кто-то захочет назвать параметры или передать несколько строк JSON отдельно - приведенный ниже код может помочь!
JQuery
PHP
Надеюсь это поможет!
источник