Использование HttpUtility.UrlEncode - PullRequest
3 голосов
/ 22 октября 2011

Я пытаюсь закодировать следующую строку, используя HttpUtility.UrlEncode;

1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.dbe01.tv" ORDER BY bouquet

Результат, который я получаю;

1%3a7%3a1%3a0%3a0%3a0%3a0%3a0%3a0%3a0%3aFROM+BOUQUET+%22userbouquet.dbe0e.tv%22+ORDER+BY+bouquet

Итак, он конвертирует: в% 3a, пробел в + и "в% 22. Согласно документации на MSDN,: не нужно конвертировать. Также я не понимаю, почему пробел конвертируется в плюс Я думал, что это должно быть% 20.

Любая информация о том, что происходит и какие возможные обходные пути?

Примечание:: следует оставить как есть, пробел должен быть% 20 ​​и "должен быть% 22 * ​​1011 *

РЕДАКТИРОВАТЬ: я нашел решение, используя простую функцию замены строки, но если кто-то еще может объяснить, почему urlencode ведет себя таким образом. Спасибо

Ответы [ 2 ]

3 голосов
/ 22 октября 2011
  • + является зарезервированным символом URL, который в качестве его целевого назначения представляет пробел, поэтому перевод является законным.
  • : является зарезервированным символом, но здесь он не используется по назначению (AFAIK), поэтому целесообразно использовать процентное кодирование.
  • " не является ни зарезервированным, ни незарезервированным (т. Е. Буквенно-цифровым и т. Д.), Поэтому кодирование процентов является единственной опцией
0 голосов
/ 22 октября 2011

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

Вы могли бы рассмотреть Uri.EscapeDataString в качестве альтернативы, он все еще кодирует: как% 3A (также использует верхний регистр для шестнадцатеричных значений), но он кодирует пробел a% 20.

Кстати, эти данные выглядят так, словно где-то происходит конкатенация SQL, скажите, пожалуйста, что вы на самом деле этого не делаете.

...