Ответ 1
UrlPathEncode
не выходит из "
, потому что им не нужно экранировать в компонентах пути.
Uri.EscapeDataString
должен делать то, что вы хотите.
У меня есть текст запроса, который кодируется с помощью 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
кодирует мои пробелы, но не кодирует мои экранированные кавычки.
Мне действительно нужно это сделать, в противном случае код поиска полностью пробит на мне (и я не контролирую код поиска).
Советы?
UrlPathEncode
не выходит из "
, потому что им не нужно экранировать в компонентах пути.
Uri.EscapeDataString
должен делать то, что вы хотите.
Есть несколько вариантов, доступных вам, самым быстрым может быть использование UrlEncode, а затем сделать string.replace, чтобы поменять символы +
на %20
.
Что-то вроде
HttpUtility.UrlEncode(input).Replace("+", "%20");
WebUtility.UrlEncode(str)
Будет кодировать все символы, которые нуждаются в кодировке с использованием формата %XX
, включая пробел.