代码之家  ›  专栏  ›  技术社区  ›  XpiritO

ASP.NET和Ajax:使用ISO-8859-1编码查询字符串参数

  •  1
  • XpiritO  · 技术社区  · 15 年前

    这里还有一个问题需要您帮助我解决:我有一个ASP.NET网站,它使用AJAX(异步)调用am .ashx 处理程序,传递一个 查询字符串 参数以从数据库中获取一些信息。

    下面是一个如何工作的示例:

    客户端 代码片段

    /* Capture selected value from a DropDownBox */
    var dropdown = document.getElementById(DropDownID);
    var selectedValue = dropdown.options[dropdown.selectedIndex].value;
    
    /* Make the call to the handler */
    var url = "MyHandler.ashx?param=" + selectedValue;
    
    var ajaxObj = new Ajax();
    ajaxObj.doRequest(url, MyCallback, args, connectionFailed);
    

    当我加载 webform (其中包含这个AJAX调用)第一次,它将正确的查询字符串发送给处理程序(我在VisualStudio中使用debug进行了检查),如 param = Street Joseph Blíss . 这是我想要的正确行为。

    问题是当我加载它时 再次(以及随后的所有时间)指出 í “Blss”中的字符在服务器端显示为 í- . 因为这是我试图在服务器端数据库访问脚本中选择的实体的密钥,所以它不能像第一个脚本那样工作 负载

    查询字符串 在…上 客户端 并对其进行解码 ,使用类似以下内容:

    客户端

    var encodedParam = encodeURIComponent(selectedValue);
    /* Make the call to the handler */
    var url = "MyHandler.ashx?param=" + encodedParam ;
    

    服务器端 (ASP.NET,C#):

    string encodedParam = context.Request.QueryString["param"];
    string value = HttpUtility.UrlDecode(encodedParam, Encoding.ASCII);
    

    1 回复  |  直到 15 年前
        1
  •  2
  •   XpiritO    15 年前

    经过更多的搜索,我发现了如何用 服务器端 代码细化。交易如下:

    我必须修改.ashx处理程序来解析从 并将其转换为UTF-8。下面是它的制作方法:

    // original parameterized value with invalid characters
    string paramQs = context.Request.QueryString["param"];
    // correct parsed value from query string parameter
    string param = Encoding.UTF8.GetString(Encoding.GetEncoding("iso8859-1").GetBytes(paramQs));