由於業務需求,最近將項目部分模塊修改為偽靜態,使用到了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下載地址: 下載