Подтвердить что ты не робот

Кодирование и пробелы в кодировке Url

У меня есть текст запроса, который кодируется с помощью 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 кодирует мои пробелы, но не кодирует мои экранированные кавычки.

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

Советы?

4b9b3361

Ответ 1

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

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

Ответ 2

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

Что-то вроде

HttpUtility.UrlEncode(input).Replace("+", "%20");

Ответ 3

WebUtility.UrlEncode(str)

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