在使用Intelligencia.UrlRewriter过程中 中文乱码问题
由于业务需求,最近将项目部分模块修改为伪静态,使用到了Intelligencia.UrlRewriter.dll组件。
网上对使用Intelligencia.UrlRewriter.dll的配置讲解很多,在此就不多说了,(如:http://www.cnblogs.com/naoguazi/p/URLReWriter.html)
本文主要分享Url传递中文时乱码问题的处理解决方案。
1、起初使用“贱招”解决。
思路就是在通过url传递中文参数的时候,先将中文进行URL编码。Jquery可以使用(编码:encodeURIComponent(val);解码:decodeURIComponent(val))进行编码和解码。我使用的IISWeb服务器,URL编码后的参数字符是(%E8%9A%82%E8%9A%81%E7%94%B7%E5%AD%A9)传递时就报错。然后我就把百分号%,使用短下划线全部替换("%E8%9A%82%E8%9A%81%E7%94%B7%E5%AD%A9".replace(/%/gm,'_'))。然后把字符串转入到后台在将其替换过来,解码,然后........。兵来将挡,水来土掩。贱招就是这样子的。最终就是能将中文参数正确的传入到后台。这种方法虽然临时解决了问题,但是会给以后的小伙伴会留下痛不欲生。
2、修改源码,重新编译Intelligencia.UrlRewriter.dll。使组件支持传递中文参数。
在GitHub找到了源码并下载。(https://github.com/OptimityAdvisors/Intelligencia.UrlRewriter)
打开解决方案,将代码插入RewriterEngine.cs文件private string Reduce(RewriteContext context, StringReader reader)方法中
result = string.Join("&", result.Split('&').Select(e => string.Join("=", e.Split('=').Select(o => HttpContext.Current.Server.UrlEncode(o)))));
如图:
保存编译后的dll就将支持传递中文了,
需要注意的是,在后台接收参数先进行解码后使用。
var str= HttpContext.Current.Server.UrlDecode(str);
支持参数中文的dll下载地址: 下载