До IIS 5.0 Response.Redirect не кодировал предоставленную вами строку. Вы сами отвечали за URLEncode строки.
В IIS 4.0 мы использовали
Response.Redirect Server.URLEncode("Page,One.asp")
С IIS 5.0 мы начали просто использовать
Response.Redirect("Page,One.asp")
Таким образом, новая функция Response.Redirect URLEncodes ваша строка, и другого варианта нет.
Есть только одна проблема. Я не могу передать знак "+" в строках. Когда выполняется Response.Redirect("sum=1+3")
, вы ожидаете, что он закодирует все небуквенно-цифровые символы, но знак «+» превращается в символ пробела на принимающей странице.
При выполнении Response.Redirect(“sum=1%2B3”)
будет получено "404 Not Found", так как "sum%3D1%25B23" не существует на сервере, так как %2B кодируется дважды.
Я хочу, чтобы «+» кодировался как %2B, чтобы принимающая страница понимала, что это на самом деле часть некоторого текста, и отображала его.
Позвольте мне привести вам пример: когда вы набираете http://translate.google.com/#en|tr|1%2B2 в своем браузере и нажимаете ввод, вы увидите, что Google принимает %2B и декодирует его как + в текстовом поле.
Ни один
Response.Redirect("http://translate.google.com/#en|tr|1%2B2")
or
Response.Redirect("http://translate.google.com/#en|tr|1+2")
делает тот же эффект, что и в примере, который я привел. Я просто хочу перенаправить на эту страницу.
Существует и другой способ, например, сначала закодировать строку, а затем перенаправить с помощью Response.Redirect unescape("Page%2COne%2Easp")
, но функции escape и unescape поддерживают некоторую часть UTF-8 и ASCII (0-127), но не поддерживают высокие символы ANSI (128-255), особенно с европейским акцентом. символы.
Какие-либо предложения?