Правильно ли обрабатывает UrlDecode плюс (+)? - PullRequest
4 голосов
/ 23 апреля 2010

Согласно RFC 2396 ,

Плюс "+", доллар "$" и запятая Символы "," были добавлены к
те, в «зарезервированном» наборе, так как они рассматриваются как зарезервированные в компонент запроса.

Действительно, поищите на этом сайте «плюс + запятая, доллар $», и вы получите

https://stackoverflow.com/search?q=plus+%2B+comma+,+dollar+$

Плюс кодируется (приложением) только тогда, когда он не используется в качестве разделителя.

Но, как наблюдали другие , функция .NET UrlDecode преобразует плюс в пробел. Где указано это поведение?

1 Ответ

7 голосов
/ 23 апреля 2010

Где указано это поведение?

Спецификация HTML , как ни странно.

UrlDecode является своего рода обманчиво названным.

+ обозначает только пробел в данных application/x-www-form-urlencoded, как определено HTML; то есть либо в теле запроса на отправку формы POST, либо в части URL ?query. Это особый случай! В других местах URL-адреса плюс - это просто плюс.

http://www.example.com/path+path/x?query+name=query+value

В этом URL для параметра query name установлено значение query value. Это может быть сгенерировано путем отправки этого поля формы в форме GET:

<input name="query name" value="query value">

Однако имя папки буквально path+path. Нет места.

Поскольку это сбивает с толку и потенциально неоднозначно, лучший подход всегда заключается в кодировании пробелов в %20 Вы можете сделать это в .NET, используя UrlPathEncode . Это одинаково хорошо работает как в части запроса URL, так и в пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...