“Server.UrlDecode(Server.UrlEncode("北京")) == “北京””,先用UrlEncode编码然后用UrlDecode解码,这条语句永远为true吗?答案是否定的,结果可能与很多人预想的不大一样。本文主要分析这一问题出现的原理,研究下Server.UrlEncode(),Server.UrlDecode(),Request["xxx"]三个函数与编码方式的关系。

         1. 问题出现的情景

         网站采用了GB2312编码,在Web.config中添加如下配置。

  <system.web>
    <globalization requestEncoding="GB2312" responseEncoding="GB2312"/>
  </system.web>

         测试页面EncodeServerTest.aspx.cs代码。

        protected void Page_Load(object sender, EventArgs e)
        {
            string s = Server.UrlDecode(Server.UrlEncode("北京"));
            bool isEqual = s == "北京";
        }

         测试页面EncodeServerTest.aspx代码。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>页面编码测试(服务器端)</title>
    <script type="text/javascript" src="Scripts/jquery-2.1.1.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <input type="button" name="btnAjaxPost" value="AJax提交" onclick="Ajax()" />
            <div id="divMessage" style="color: red"></div>
        </div>
    </form>
    <script type="text/javascript">
        function Ajax() {
            $.ajax({
                type: "POST",
                url: "EncodeServerTest.aspx",
                data: {name:"name"},
                success: function (data) {
                    $("#divMessage").html(data);
                }
            });
        }

    </script>
</body>
</html>
View Code

相关文章: