0

在我的 IIS7 上,我有 ASP.NET WebForms 站点,并且在查询字符串中使用了西里尔字母值。我HttpUtility.UrlEncode在重定向时使用参数,最后我有如下网址:

http://mysite.com/Search.aspx?SearchText=текст

当我尝试读取参数SearchText值(包含HttpUtility.Decode()函数)时,它会返回一个错误的值ÑекÑÑ,但应该返回текст

它适用于 ASP.NET 开发人员服务器上的 localhost,但不适用于 IIS7(包括本地 IIS7) 在我的 web.config 中,我设置了行

<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

但它仍然不起作用。

感谢任何帮助,

非常感谢!

4

3 回答 3

1

问题实际上出在我在 Web 应用程序中使用的 UrlRewriting.net 中。

于 2013-06-04T17:56:33.210 回答
1

我通过将值转换为 ToBase64String 解决了同样的问题:

  1. 在重定向到目标页面之前,我对值进行了编码:

        Dim Data() As Byte  'For the data to  be encoded
    
        'Convert the string into a byte array
        Dim encoding As New System.Text.UTF8Encoding
        Data = encoding.GetBytes(ParamToPass)
    
        'Converting to ToBase64String
        Dim EncodedStringToPass as string = Convert.ToBase64String(Data)
    
        Page.Response.Redirect("TargetPage.aspx?Param=" & EncodedStringToPass, False)
    
  2. 在目标页面:

        Dim Data() As Byte  'For the data to  be decoded
        Data = Convert.FromBase64String(Page.Request.Params("Param"))
    
        Dim encoding As New System.Text.UTF8Encoding
        Dim ParamToPass As String = encoding.GetString(Data)
    

PS该方法唯一的缺点是在浏览器的url字符串中看不到参数的真实值。但就我而言,这没有问题

于 2017-02-04T22:58:28.233 回答
0

如果你使用这个redirect函数,是的,里面有这个调用

url = UrlEncodeRedirect(url);

这打破了西里尔字母、希腊字母和可能的其他字母。如果我没记错的话(我说记住是因为这个问题来自我几个月前的经验)字符的中断是在?符号之后。无论如何,我有同样的问题。

可能的解决方案:

  • 进行自定义重定向,可能不如原始重定向,但您可以绕过此问题。
  • 为您的重定向逻辑找到一些替代方法。
  • 使您的自定义文本编码仅使用重定向不会更改的有效 url 字符,然后再次将它们解码回来。不利的是,这将像隐藏文本而不是可见的可读搜索词。

这是重定向的基础。

public static void RedirectSimple(string url, bool endResponse)
{
    HttpResponse MyResponse = HttpContext.Current.Response;

    MyResponse.Clear();
    MyResponse.TrySkipIisCustomErrors = true;
    MyResponse.StatusCode = 302;
    MyResponse.Status = "302 Temporarily Moved";
    MyResponse.RedirectLocation = url;

    MyResponse.Write("<html><head><title>Object moved</title></head><body>\r\n");
    MyResponse.Write("<h2>Object moved to <a href=\"" + url + "\">here</a>.</h2>\r\n");
    MyResponse.Write("</body></html>\r\n");

    if (endResponse){
        MyResponse.End();
    }
}

您可以将其设为一个函数并尝试它是否可以正常工作。

于 2013-06-04T16:02:15.087 回答