HttpServerUtility.UrlPathEncode vs HttpServerUtility.UrlEncode

В чем разница между HttpServerUtility.UrlPathEncode и HttpServerUtility.UrlEncode? И когда я должен выбирать один за другим?

Ответ 1

Обновление. Начиная с версии 4.5 для каждой ссылки MSDN Microsoft рекомендует использовать только UrlEncode. Кроме того, информация, ранее указанная в MSDN, не полностью описывает поведение двух методов - см. Комментарии.

Разница заключается во всех экранах пространства - UrlEncode вытесняет их в знак +, UrlPathEncode переходит в %20. + и %20 эквивалентны только в том случае, если они являются частью части QueryString за W3C. Таким образом, вы не можете избежать всего URL-адреса, используя знак +, только часть запроса. Суть в том, что UrlPathEncode всегда лучше imho

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

http://msdn.microsoft.com/en-us/library/4fkewx0t.aspx

Ответ 2

UrlEncode полезен для значений строки запроса (так что слева или, в частности, справа, каждого =).

В этом URL-адресе foo, fooval, bar и barval должны EACH быть UrlEncode'd отдельно:

http://www.example.com/whatever?foo=fooval&bar=barval

UrlEncode кодирует все, такие как?, &, = и /, акцентированные или другие символы, отличные от ASCII, и т.д., в кодировку% -style, за исключением пробела, который он кодирует как+. Это кодировка в стиле формы и лучше всего подходит для чего-то, что вы намерены вставить в querystring (или, может быть, между двумя слэшами в URL-адресе) в качестве параметра, не получая все jiggy с управляющими символами url (например, &). В противном случае, к сожалению, помещенный и или = в значение формы пользователя или значение значения db могут сломать вещи.

EDIT: Uri.EscapeDataString - очень близкое соответствие с UrlEncode, и может быть предпочтительным, хотя я не Не знаю точных различий.

UrlPathEncode полезен для остальной части строки запроса, он затрагивает все, что находится слева от..

В этом URL-адресе весь URL-адрес (от http до barval) должен выполняться через UrlPathEncode.

http://www.example.com/whatever?foo=fooval&bar=barval

UrlPathEncode НЕ кодирует?, &, =, или /. Он, однако, как UrlEncode, кодирует символы с акцентом/не-ASCII с% нотации, а пространство также становится %20. Это полезно, чтобы убедиться, что URL-адрес действителен, так как пробелы и акцентированные символы отсутствуют. Он не коснется вашего запроса (все справа от?), Поэтому вам нужно закодировать это с помощью UrlEncode, выше.