在使用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下载地址: 下载

 

posted @ 2016-07-27 17:54  闲僧  阅读(606)  评论(0编辑  收藏  举报