В ASP.NET, почему есть UrlEncode () И UrlPathEncode ()? - PullRequest
7 голосов
/ 03 ноября 2011

В недавнем проекте я имел удовольствие устранять ошибку, из-за которой изображения не загружались, когда в имени файла были пробелы.Я подумал: «Что за простая проблема, я UrlEncode() это!»Но, нет!Простое использование UrlEncode() не решило проблему.

Новая проблема заключалась в том, что HttpUtilities.UrlEncode() метод переключал пробелы () на плюс (+) вместо из %20 как хотел браузер.Так что file+image+name.jpg вернется не найденным, в то время как file%20image%20name.jpg будет найден правильно.

К счастью, коллега указал мне HttpUtilities.UrlPathEncode(), который использует %20 для пробелов вместо +.

ПОЧЕМУ есть два способа обработки URL-кодирования?ПОЧЕМУ есть две команды, которые ведут себя так по-разному?

Ответы [ 2 ]

9 голосов
/ 03 ноября 2011

UrlEncode полезен для использования с QueryString, поскольку браузеры, как правило, используют здесь + вместо пробела при отправке форм методом GET.

UrlPathEncode просто заменяет все символы, которые нельзя использовать в URL-адресе, например <, > и .

Обе ссылки MSDN включают эту цитату:

Вы можете кодировать URL, используя метод UrlEncode или UrlPathEncode метод. Однако методы возвращают разные результаты. Метод UrlEncode преобразует каждый пробел в символ плюс (+). Метод UrlPathEncode преобразует каждый пробел в строка "% 20", представляющая пробел в шестнадцатеричной записи. использование метод UrlPathEncode при кодировании части пути URL-адреса в Для того, чтобы гарантировать постоянный декодированный URL, независимо от Платформа или браузер выполняет декодирование.

2 голосов
/ 03 ноября 2011

Так что в URL у вас есть путь, а затем? а затем параметры (т.е. http://some_path/page.aspx?parameters). пути URL кодируют пробелы иначе, чем параметры URL, поэтому есть две версии. В течение длительного времени пробелы были недопустимы в URL, но были в параметрах.

Другими словами, URL форматирования со временем менялся. В течение долгого времени в URL также могли присутствовать только символы ANSI.

...