// или / - / является допустимым компонентом URL? - PullRequest
1 голос
/ 11 августа 2011

Справочная информация: я создаю иерархический географический каталог. В базах гео-данных, которые я использую, есть поля, в которых я могу создать такой URL: / ISO_country / 1st_admin_division / 2nd_admin_division / PLACE_NAME / почтовый индекс /

ISO_country, place_name и zipcode гарантированно содержат данные. Но 1-й и 2-й административный отдел могут иметь или не иметь данные.

В США у меня есть / США / Нью-Йорк / Нассау-Каунти / Хиксвилл / 51212 / Но в Южной Африке у меня есть / ZA / [blank] / [blank] / Pretoria / 0030 /

Если я пойду с (некрасиво) / ZA /// Претория / 0030 / это действительный URL? А как же безобразно / ZA / - / - / Pretoria / 0030 /?

Какие-нибудь крупные браузеры становятся "умными" и пытаются устранить подобные вещи?

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

Да, оба являются абсолютно действительными URI. См. RFC 2396 .

Какие-нибудь основные браузеры становятся "умными" и пытаются устранить подобные вещи?

Не так далеко, как я видел. Кстати, тире (-) не являются специальными символами в URI, поэтому вам действительно не нужно беспокоиться о них.

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

Почему бы не работать на модели с необязательным аргументом?Оба эти URL кажутся работоспособными и легко разбираемыми:

/ZA/Pretoria/0030
/US/New-York/Nassau-County/Hicksville/51212/

И просто для того, чтобы бросить рассол в работе:

/AU/Victoria/Melbourne/3000

Если вы знаете, что у вас всегда будут значения дляваш первый, второй, последний и последний элементы, почему бы не сжать первый, а затем проанализировать ваши токены URL в обратном направлении?

# rubyish pseudocode
tokens      = "/AU/Victoria/Melbourne/3000".split("/")
iso_country = tokens[0]

tokens.reverse!
tokens.drop_last_item!

zipcode          = tokens[0] # => 3000
place_name       = tokens[1] # => Melbourne
admin_division_2 = tokens[2] # => Victoria
admin_division_1 = tokens[3] # => nil / ""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...