Допустимые разделители URL - PullRequest
15 голосов
/ 06 октября 2010

У меня длинный URL с несколькими значениями.

Пример 1:

http://www.domain.com/list?seach_type[]=0&search_period[]=1&search_min=3000&search_max=21000&search_area=6855%3B7470%3B7700%3B7730%3B7741%3B7742%3B7752%3B7755%3B7760%3B7770%3B7800%3B7840%3B7850%3B7860%3B7870%3B7884%3B7900%3B7950%3B7960%3B7970%3B7980%3B7990%3B8620%3B8643%3B8800%3B8830%3B8831%3B8832%3B8840%3B8850%3B8860%3B8881%3B9620%3B9631%3B9632

Моя область поиска переменных содержит только 4 цифры (пример 4000, 5000), но может содержатьих много.Прямо сейчас я разделяю их в URL, используя ; в качестве символа-разделителя.Хотя, как видно из примера 1,;конвертируется в %3B.Это заставляет меня поверить, что это плохой символ для использования.

Какой лучший разделитель URL?

Ответы [ 5 ]

36 голосов
/ 06 октября 2010

Moontear, я думаю, что вы неправильно прочитали связанный документ . Это ограничение относится только к части схемы в URL. В случае WWW URL это "http".

В следующем разделе документа говорится:

Таким образом, только буквенно-цифровые символы, специальные символы "$ -_. +! * '()," И зарезервированные символы, используемые в зарезервированных целях, могут быть использованы незакодированный внутри URL.

Я бы лично использовал запятую (,). Тем не менее, плюс (+) и тире (-) также являются приемлемыми вариантами.

Кстати, в этом документе также упоминается, что точка с запятой (;) зарезервирована в некоторых схемах.

6 голосов
/ 06 октября 2010

Что ж, согласно RFC1738 , действительные URL могут содержать только буквы a - z , знак плюс ( + ), точка и дефис ( - ).

Как правило, я бы использовал плюс, чтобы отделить области поиска.Таким образом, ваш URL станет http://www.domain.com/list?seach_type=0&search_period=1&search_min=3000&search_max=21000&search_area=6855+7470+7700+...

- РЕДАКТИРОВАТЬ -

Как указала GinoA, я неправильно прочитал документ.Следовательно, «$-_.+!*'(),» также является допустимым символом.Я бы все равно пошел со знаком +.

3 голосов
/ 06 октября 2010

Если нужно разделить только цифры, у вас есть большой выбор разделителей.Вы можете выбрать любую букву, например.

Вероятно, пробел может быть хорошим выбором.Он будет преобразован в символ + в URL, поэтому будет более читабельным, чем буква.

Пример: search_area=4000+5000+6000

1 голос
/ 07 августа 2014

"+" следует интерпретировать как пробел "", когда тип содержимого является application / x-www-form-urlencoded (стандарт для форм HTML). Это может быть обработано программным обеспечением вашего сервера.

Я предпочитаю "!" Он не получает кодированный URL (по крайней мере, в Chrome) и резервирует «+» для использования в качестве реального пробела в типичном случае.

0 голосов
/ 29 сентября 2017

Я очень опоздал на вечеринку, но допустимая строка запроса может повторять переменные, поэтому вместо ...

http://x.y.z/list?type=0&period=1&min=3000&max=21000&area=6855+7470+7700

... вы также можете использовать ...

http://x.y.z/list?type=0&period=1&min=3000&max=21000&area=6855&area=7470&area=7700
...