Url-кодировка кавычек и пробелов - PullRequest
28 голосов
/ 27 января 2011

У меня есть некоторый текст запроса, который кодируется с помощью JavaScript, но я столкнулся с вариантом использования, в котором мне, возможно, придется кодировать один и тот же текст на стороне сервера, и происходящее кодирование не совпадает. Мне нужно, чтобы это было так же. Вот пример.

Я ввожу "I like food" в поле поиска и нажимаю кнопку search. JavaScript кодирует это как %22I%20like%20food%22

Допустим, я получаю то же значение, что и строка в объекте запроса на стороне сервера. Это будет выглядеть так: "\"I like food\""

Когда я использую HttpUtility.UrlEncode(value), результат будет "%22I+like+food%22". Если я использую HttpUtility.UrlPathEncode(value), результат будет "\"I%20like%20food\""

Итак, UrlEncode кодирует мои кавычки, но использует символ + для пробелов. UrlPathEncode кодирует мои пробелы, но не кодирует мои экранированные кавычки.

Мне действительно нужно это сделать для обеих целей, иначе код поиска полностью мне не нужен (и я не могу контролировать код поиска).

Советы

Ответы [ 3 ]

54 голосов
/ 27 января 2011

UrlPathEncode не экранирует ", потому что их не нужно экранировать в компонентах пути.

Uri.EscapeDataString должен делать то, что вы хотите.

9 голосов
/ 27 января 2011

Доступно несколько вариантов, наиболее быстрым может быть использование UrlEncode, а затем выполнение string.replace для замены + символов на %20.

Что-то вроде

HttpUtility.UrlEncode(input).Replace("+", "%20");
0 голосов
/ 07 июля 2016
WebUtility.UrlEncode(str)

Будет кодировать все символы, которые необходимо кодировать, используя формат %XX, включая пробел.

...