zoukankan      html  css  js  c++  java
  • IIS7下使用4.0框架集成模式URLRewriter重写中文URL乱码问题

    由于种种原因,最近将服务器上部署的网站修改4.0框架。但悲剧的问题出现了,发现搜索中文的时候关键词都成乱码了。

    在网上查找相关资料得到几种相关解决方案如下:

    • 服务器打补丁server2008 打sp2补丁中文语言包
    • url中中文先通过Server.UrlEncode编码
    • 修改网站编码

    根据以上提示进行一步一步解决 检查服务器系统已经是sp2的中文系统,网站搜索是通过js跳转的无法进行Server.UrlEncode编码,修改网站编码比较麻烦而且有可能导致其他问题,所以以上方法都行不通。

    只能自己想办法了,自己添加一个简单测试页面 http://www.test.cn/test.aspx?kw=测试 页面输出QueryString时候发现输出的中文是正常的。再对搜索页面的地址不进行url重写的情况下访问测试,发现同样中文同样是正常的。于是初步确定是在URLRewriter中转发时候参数传递过程中出现问题。按照之前查到的使用Server.UrlEncode对参数进行编码。经过一番调试后终于是没有乱码了。

    修改代码RewriterUtils.cs 的RewriteUrl方法

            internal static void RewriteUrl(HttpContext context, string sendToUrl, out string sendToUrlLessQString, out string filePath)
            {
                if (context.Request.QueryString.Count > 0)
                {
                    if (sendToUrl.Contains("?"))
                    {
                        sendToUrl = sendToUrl + "&" + context.Request.QueryString;
                    }
                    else
                    {
                        sendToUrl = sendToUrl + "?" + context.Request.QueryString;
                    }
                }
                string queryString = string.Empty;
                sendToUrlLessQString = sendToUrl;
                int tempIndex = sendToUrl.IndexOf('?');
                if (tempIndex != -1)
                {
                    sendToUrlLessQString = sendToUrl.Substring(0, tempIndex);
                    queryString = sendToUrl.Substring(tempIndex + 1);
                }
                filePath = context.Server.MapPath(sendToUrlLessQString);
                
               //iis7 获取乱码问题
                var list = queryString.Split('&');
                var newQueryStr = string.Empty;
                for (int i = 0; i < list.Length; i++)
                {
                    var arr = list[i].Split('=');
                    if (arr.Length > 1)
                    {
                        newQueryStr = newQueryStr + arr[0] + "=" + context.Server.UrlEncode(arr[1]) + "&";
                    }
                    else
                    {
                        newQueryStr = newQueryStr + "&";
                    }
                }
    
                context.RewritePath(sendToUrlLessQString, string.Empty, newQueryStr.TrimEnd('&'));
            }
    

      

    问题是解决了,不过这肯定是很笨的一种方法。先临时把问题解决,再寻找更好的办法了。希望遇到类似问题的提供意见,同时也希望遇到类似问题的人能够快速定位问题

    作者:xuchengzone
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    JavaScript
    94.Binary Tree Inorder Traversal
    144.Binary Tree Preorder Traversal
    106.Construct Binary Tree from Inorder and Postorder Traversal
    105.Construct Binary Tree from Preorder and Inorder Traversal
    90.Subsets II
    78.Subsets
    83.Merge Sorted Array
    80.Remove Duplicates from Sorted Array II
    79.Word Search
  • 原文地址:https://www.cnblogs.com/xuchengzone/p/2611843.html
Copyright © 2011-2022 走看看