Какие специальные символы безопасны для использования в URL?

13

Какие специальные символы безопасны для использования в URL?

ВЫ
источник
2
Было бы гораздо быстрее и проще спросить, какие специальные символы небезопасны для использования в URL (согласно ответу Андреаса Бонини ниже).
Марк Хаттон
2
Сложно ответить на вопрос, что небезопасно: любой символ, отличный от ascii, должен быть закодирован в процентах.
Нео
2
@neo: нет, это не так: O
Томас Бонини

Ответы:

10

Безопасными символами являются az, AZ, 0-9 и _ - (подчеркивание и минус), которые помимо зарезервированных символов используются для параметров.

Другие персонажи будут давать проблемы в некоторой степени. пример: если один параметр является массивом, ?param=array[content]то есть будет отображать URL-адрес с закодированными в квадратных скобках URL-адресами, которые выглядят уродливо и невозможно продиктовать.

Но проблема не только в том, что это некрасиво. Допустим, у вас есть jpg с символом рядом с более безопасным, часто браузер не сможет загрузить его, получив 404. Это проблема старых браузеров и некоторых мобильных браузеров.

Как это проверить?

  • поместите кучу изображений / js / css с символами, которые вы хотите проверить в именах на общедоступной странице с большим количеством посетителей
  • Сделайте так, чтобы страница 404 отправляла вам электронное письмо каждый раз, когда получал хит

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

Дезинтегратор
источник
5
ну, вместо «безопасных символов» я бы сказал «чрезвычайно безопасные символы» - спецификация позволяет больше, но я согласен с вами, что здесь лучше быть консервативным.
Джефф Этвуд
2
Что не так с периодом?
BlueWhale
11

Следующие символы имеют особое значение в компоненте пути вашего URL (компонент пути - это все, что находится перед символом «?»):

  ";" | "/" | "?"

В дополнение к этому, следующие символы имеют специальное значение в части запроса вашего URL (все после '?'). Поэтому, если они после «?» вам нужно убежать от них

  ":" | "@" | "&" | "=" | "+" | "$" | ","

Для более подробного объяснения см. RFC .

Томас Бонини
источник
3
Конечно, просто для ясности, этот ответ противоположен вопросу. Вопрос спрашивает, какие символы безопасны, а не те, которые небезопасны. Поскольку трудно ответить на первоначальный вопрос надежно, вопрос, вероятно, следует отредактировать, чтобы задать его наоборот и сопоставить этот ответ.
Марк Хаттон
3

Ответы здесь хорошие, но, думаю, стоит упомянуть еще одно исключение - неанглийские символы. Ссылка на этот вопрос SF здесь , такие символы, как ñ (как в Español), вполне законны, ЕСЛИ они правильно закодированы в вашем DNS.

Вы должны использовать Punycode в DNS, чтобы разрешить их в современных браузерах (запись для español есть xn--espaol-zwa), но теперь они совершенно безопасны для использования в доменных именах, так как их легко набирать и не говорящим по-английски. ,

Марк Хендерсон
источник