HttpUtility.UrlEncode - минус вместо плюса? - PullRequest
1 голос
/ 06 апреля 2011

Я в ситуации, когда у меня есть какой-то путь.Этот путь может быть что-то вроде «jadajada.com/My Site.html».

Я использую HttpUtility.UrlEncode для кодирования URL-адресов, и это здорово.Однако у меня есть проблема, что всякий раз, когда у меня есть пробел, он заменяет его знаком «+».Мне нужен знак "-".

Может ли этот метод выполнить эту задачу?И если да, то какая кодировка ect.

(И да, я знаю, что вы можете использовать string.Replace, но, пожалуйста, пока избегайте этого решения; -)

Ответы [ 4 ]

4 голосов
/ 06 апреля 2011

Замена пробелов на "-" на самом деле не кодировка , так как для этого не существует стандартного декодера; "+" правильно.

Однако, если это только для отображения, и пока ваш код не полагается на это значение (например, для точного соответствия слагов, ожидая пробел ) вы можете просто сделать .Replace(" ","-") перед кодированием. В этом сценарии lossy вы также можете заменить несколько других, урезать слишком длинные строки и т. Д.

Кодирование, если оно имеет -, должно быть запрещено (т. Е. Оно не изменится).

1 голос
/ 06 апреля 2011

UrlEncoding никогда не заменит пробел на - сам по себе, так как это не представление пробела внутри URL.Он будет использовать + или% 20.

Так что если вы действительно хотите это сделать, я думаю, что string.Replace - ваш лучший вариант здесь, но если вы не хотите пробелов внутри результирующего URL, вам следуетвозможно, удалите пробелы из URL, прежде чем кодировать его.

1 голос
/ 06 апреля 2011

Пробел может быть закодирован как URL + или %20. Именно так кодируется пробел, поэтому нет встроенного метода для кодирования его в любой другой произвольный символ.

Если вы хотите заменить пробелы на - вместо того, чтобы не кодировать, а заменить, поэтому будет уместно использовать метод Replace.

0 голосов
/ 30 июля 2015

Одна из причин, по которой вы хотите изменить его с + на -, заключается в том, что перезапись URL-адресов не работает, когда URL-адрес содержит + (если только вы полностью не отключите двойное экранирование).Проще поменять + на -

...