Asp.Net URL Кодировка сломана - PullRequest
       2

Asp.Net URL Кодировка сломана

0 голосов
/ 27 октября 2011

Я шифрую значения и добавляю их в URL.Моя проблема, однако, в том, что после того, как я запускаю его через HttpUtility.URLEncode, я иногда придумываю неверные URL.Я получаю такие вещи, как

www.mysite.com/page.aspx?id=+jdghogjhior==

Я думаю, что это главный плюс, который доставляет мне проблемы.Есть идеи?Что вы, ребята, делаете?

Проблемы, аналогичные тем, о которых говорит этот парень: Server.UrlEncode и HttpUtility.UrlEncode

Ответы [ 4 ]

1 голос
/ 27 октября 2011

Вы можете попытаться взять зашифрованную строку, преобразовать ее в строку base64 и отправить по URL. Когда вы получите его, декодируйте с base64 и расшифруйте его.

Кодирование:

byte[] bt = Encoding.Unicode.GetBytes("5dnjnbf&&#jnb3=+");
string str = Convert.ToBase64String(bt);

Decode:

byte[] bt = Convert.FromBase64String(str);
string s = Encoding.Unicode.GetString(bt);
0 голосов
/ 27 октября 2011

Является ли то, что вы кодируете, случайно уже закодированным base64?

Если это так, вам нужно использовать «модифицированный» base64, который совместим с URL :

... существует модифицированный вариант Base64 для URL, где не будет использоваться заполнение '=', а символы '+' и '/' в стандартном Base64 соответственно заменены на '-' и '_'

См. Код для декодирования / кодирования модифицированного URL base64 , например.

0 голосов
/ 27 октября 2011

Я попробовал это, и он правильно показал идентификатор:

<a href='Page.aspx?ID=
    <%=server.urlencode(server.htmlencode("+jdghogjhior==")) %>'>Click here</a>
0 голосов
/ 27 октября 2011

Я думаю, что + - это единственная проблема, поэтому я обычно заменяю ее чем-то другим, что, как я знаю, не будет в запросе, например, пробел (% 20)

Но в некоторых случаях вам нужны пробелы

Итак, попробуйте: Uri.EscapeDataString

Понравилась ссылка, которую вы разместили?

...