разделение значений в URL, а не с & - PullRequest
6 голосов
/ 18 сентября 2010

Каждый параметр в URL может иметь несколько значений. Как я могу их разделить? Вот пример:

http://www.example.com/search?queries=cars,phones

Итак, я хочу найти 2 разные вещи: автомобили и телефоны (это только надуманный пример). Проблема в разделителе, запятой. Пользователь может ввести запятую в поисковую форму как часть своего запроса, и тогда это облажается. Я мог бы иметь 2 отдельных параметра URL:

http://www.example.com/login?name1=harry&name2=bob

Там нет реальной проблемы, на самом деле я думаю, что именно так URL были разработаны для решения этой ситуации. Но я не могу использовать это в моей конкретной ситуации. Требуется отдельный длинный пост, чтобы сказать, почему ... Мне нужно просто разделить значения.

Мой вопрос в основном, есть ли URL-кодируемый символ или значение, которое невозможно ввести в форму (текстовое поле или ввод), которую я могу использовать в качестве разделителя? Как нулевой персонаж? Или невидимый символ?

ОБНОВЛЕНИЕ : спасибо всем за ваши очень быстрые ответы. Я должен был также перечислить тот же пример с именем параметра, но порядок имеет значение в моем случае, так что это тоже не вариант. Мы решили эту проблему, используя символ URL в кодировке% 00 (UTF-8 \ u0000) в качестве разделителя значений.

Ответы [ 6 ]

13 голосов
/ 18 сентября 2010

Стандартный подход состоит в том, чтобы использовать одно и то же имя ключа дважды.

http://www.example.com/search?queries=cars&queries=phones

Большинство библиотек форм позволяют автоматически обращаться к нему как к массиву.(Если вы используете PHP (и используете $_POST/GET, а не изобретаете колесо), вам нужно изменить имя на queries[].)

2 голосов
/ 18 сентября 2010

Просто закодируйте URL-адрес пользователя, чтобы его запятые стали % 2C .

2 голосов
/ 18 сентября 2010

Каждому из них можно присвоить одно и то же имя параметра.

http://www.example.com/search?query=cars&query=phones

Средний HTTP-сервер на стороне сервера может получить их в виде массива . Согласно истории ваших вопросов, вы используете JSP / Servlet, поэтому вы можете использовать HttpServletRequest#getParameterValues() для этого.

String[] queries = request.getParameterValues("query");
1 голос
/ 18 сентября 2010

Почему бы просто не сделать что-то вроде "||"?Любой, кто вводит это в область поиска, вероятно, заснул на своей клавиатуре:} Затем просто взорвите его на бэкэнде.

1 голос
/ 18 сентября 2010

Придумайте свой собственный разделитель, который вряд ли будет введен в запросе. Например, два подчеркивания '__'.

0 голосов
/ 18 сентября 2010

проще всего было бы использовать собственный разделитель, такой как [!! ValSep !!].

...