2016-11-16 3 views
3

В соответствии с RFC 3986 допустимые символами для компонента пути являются:Url Path Кодирование, которое действительно работает?

a-z A-Z 0-9 . - _ ~ ! $ & ' () * + , ; = : @ 

, а также процентов закодированных символов и, конечно же, слэш /.

Однако я не могу найти класс, который преобразует строку в хорошо отформатированный путь в соответствии с приведенными выше правилами.

string rawPath = "/A9_([email protected]*)/# ?/"; 
string expectedPath = "/A9_([email protected]*)/%23%20%3f"; 

Однако увидеть код ниже:

string rawPath = "/A9_([email protected]*)/# ?/"; 
Uri.EscapeDataString(rawPath); //Output=>%2FA9_%28%2B%40%2A%29%2F%23%20%3F%2F 
Uri.EscapeUriString(rawPath); //Ouput=>/A9_([email protected]*)/#%20?/ 
HttpUtility.UrlPathEncode(rawPath); //Ouput=>/A9_([email protected]*)/#%20?/ 

Я ничего не пытался листы разрешенных символов незаменяемыми и Собственость ускользает все другие символы.

Надеюсь, кто-то может спасти меня от необходимости писать мою собственную утилиту!

+0

Вы просто пытаетесь форматировать определенный способ или URL-адрес не работает? –

+0

Наверное, никто, кто проходит в '#' или '?' Как часть пути, не убежит от него; они хотят, чтобы вы относились к ним как к разделителям. Неудивительно, что для этого не существует заранее подготовленного метода - разумная вещь - не допускать путей, которые включают символы '#' или '?' В качестве символов, независимо от того, могут ли они быть переданы. (Я бы не ожидал, что многие веб-серверы тоже будут правильно рассматривать этот случай, но это еще одна проблема.) –

ответ

1

Каждый из них обеспечивает ожидаемую кодировку, основанную на различных правилах в создании URI. Это связано с включением Зарезервированных символов (см. Раздел 2.2 RFC 3968), которые включают ? и #, которые являются разделителями, определенными стандартом. Они не будут сбежать, потому что они являются частью определения языка.

+0

Не уверен, согласен ли я с этим ответом. (См. Раздел 3.3 RFC 3968). Путь «сегмент» может состоять из: 'unreserved/pct-encoded/sub-delims /": "/" @ "' Поскольку '#' '?' И 'space' нет в этом списке, вы ожидаете, что он должен быть закодирован в процентах. –

 Смежные вопросы

  • Нет связанных вопросов^_^