работа с зашифрованным параметром HttpUtility.UrlEncode - PullRequest
1 голос
/ 02 марта 2011

У меня проблема с зашифрованными параметрами URL при применении HttpUtility.UrlEncode или UrlDecode.

для заданной строки URL: ?fid=7kqguwhYMNw=&uid=YCRSGG71+58= Знак PLUS, который является частью зашифрованных данных uid,разделили и заменили пробелом, поэтому мои попытки расшифровать его не увенчались успехом.

ОК, поэтому я знаю, что + является зарезервированным сокращением для пробела в QUERYSTRING (RFC 1630), но поскольку у меня не так уж многоконтроль над значением, которое возвращается из шифрования, как я могу обойти это.

РЕДАКТИРОВАТЬ: ОК, так что хороший вопрос поднят.Игнорируйте часть вопроса UrlEncode / UrlDecode.Request.QueryString (["uid"]) все равно будет иметь знак плюс, когда я передам его методу дешифрования.

Ответы [ 3 ]

1 голос
/ 02 марта 2011

Значение в кодировке Base-64 должно быть закодировано в URL перед его добавлением в URL.Если я сделаю HttpUtility.UrlEncode("YCRSGG71+58="), то получу YCRSGG71%2b58%3d - который не имеет знаков плюс и может быть правильно декодирован.

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

1 голос
/ 03 января 2012

Я бы предложил добавить код для удаления символов =, заменить + на - и заменить / на.

s = s.Replace("=", "").Replace("+", "-").Replace("/", ".")

Если вам нужно обработать полученную строку, вы можете сделать наоборот:

s = s.Replace(".", "/").Replace("-", "+")

(нет причин возвращать символы = ... они просто дополняют).

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

0 голосов
/ 02 марта 2011

В качестве дополнительного замечания вы должны использовать HttpUtility.UrlEncode и HttpUtility.UrlDecode для такого рода работы. Тем не менее, даже они не помогут вам, так как URL в любом случае искажен.

Так что, вообще ничего не используйте! Поскольку он не закодирован, зачем его декодировать?

...