Было бы гораздо быстрее и проще спросить, какие специальные символы небезопасны для использования в URL (согласно ответу Андреаса Бонини ниже).
Марк Хаттон
2
Сложно ответить на вопрос, что небезопасно: любой символ, отличный от ascii, должен быть закодирован в процентах.
Нео
2
@neo: нет, это не так: O
Томас Бонини
Ответы:
10
Безопасными символами являются az, AZ, 0-9 и _ - (подчеркивание и минус), которые помимо зарезервированных символов используются для параметров.
Другие персонажи будут давать проблемы в некоторой степени. пример: если один параметр является массивом, ?param=array[content]то есть будет отображать URL-адрес с закодированными в квадратных скобках URL-адресами, которые выглядят уродливо и невозможно продиктовать.
Но проблема не только в том, что это некрасиво. Допустим, у вас есть jpg с символом рядом с более безопасным, часто браузер не сможет загрузить его, получив 404. Это проблема старых браузеров и некоторых мобильных браузеров.
Как это проверить?
поместите кучу изображений / js / css с символами, которые вы хотите проверить в именах на общедоступной странице с большим количеством посетителей
Сделайте так, чтобы страница 404 отправляла вам электронное письмо каждый раз, когда получал хит
У меня есть входящая почта с 14000 электронными письмами, подтверждающими мою точку зрения.
ну, вместо «безопасных символов» я бы сказал «чрезвычайно безопасные символы» - спецификация позволяет больше, но я согласен с вами, что здесь лучше быть консервативным.
Джефф Этвуд
2
Что не так с периодом?
BlueWhale
11
Следующие символы имеют особое значение в компоненте пути вашего URL (компонент пути - это все, что находится перед символом «?»):
";" | "/" | "?"
В дополнение к этому, следующие символы имеют специальное значение в части запроса вашего URL (все после '?'). Поэтому, если они после «?» вам нужно убежать от них
Конечно, просто для ясности, этот ответ противоположен вопросу. Вопрос спрашивает, какие символы безопасны, а не те, которые небезопасны. Поскольку трудно ответить на первоначальный вопрос надежно, вопрос, вероятно, следует отредактировать, чтобы задать его наоборот и сопоставить этот ответ.
Марк Хаттон
3
Ответы здесь хорошие, но, думаю, стоит упомянуть еще одно исключение - неанглийские символы. Ссылка на этот вопрос SF здесь , такие символы, как ñ (как в Español), вполне законны, ЕСЛИ они правильно закодированы в вашем DNS.
Вы должны использовать Punycode в DNS, чтобы разрешить их в современных браузерах (запись для español есть xn--espaol-zwa), но теперь они совершенно безопасны для использования в доменных именах, так как их легко набирать и не говорящим по-английски. ,
Ответы:
Безопасными символами являются az, AZ, 0-9 и _ - (подчеркивание и минус), которые помимо зарезервированных символов используются для параметров.
Другие персонажи будут давать проблемы в некоторой степени. пример: если один параметр является массивом,
?param=array[content]
то есть будет отображать URL-адрес с закодированными в квадратных скобках URL-адресами, которые выглядят уродливо и невозможно продиктовать.Но проблема не только в том, что это некрасиво. Допустим, у вас есть jpg с символом рядом с более безопасным, часто браузер не сможет загрузить его, получив 404. Это проблема старых браузеров и некоторых мобильных браузеров.
Как это проверить?
У меня есть входящая почта с 14000 электронными письмами, подтверждающими мою точку зрения.
источник
Следующие символы имеют особое значение в компоненте пути вашего URL (компонент пути - это все, что находится перед символом «?»):
В дополнение к этому, следующие символы имеют специальное значение в части запроса вашего URL (все после '?'). Поэтому, если они после «?» вам нужно убежать от них
Для более подробного объяснения см. RFC .
источник
Ответы здесь хорошие, но, думаю, стоит упомянуть еще одно исключение - неанглийские символы. Ссылка на этот вопрос SF здесь , такие символы, как ñ (как в Español), вполне законны, ЕСЛИ они правильно закодированы в вашем DNS.
Вы должны использовать Punycode в DNS, чтобы разрешить их в современных браузерах (запись для español есть
xn--espaol-zwa
), но теперь они совершенно безопасны для использования в доменных именах, так как их легко набирать и не говорящим по-английски. ,источник