本文导读:在WEB编程中,经常需要通过JS传递参数给C#后台代码,如果传递的参数包括中文,则需要在JS中通过encodeURIComponent编码,对应C#中的HttpUtility.UrlEncode编码。
1、由于JS中通过encodeURIComponent编码时,将中文或者"="、空格等特殊字符转换为大写,但是C#中HttpUtility.UrlEncode编码时,则会将这些字符转换为小写。例如 .NET中方法HttpUtility.UrlEncode会将‘=’编码成‘%3d’,而不是%3D。
2、HttpUtility.UrlEncode会把“空格”编码为“+”,实际上应该编码为“%20”,我们需要手动将“+”替换为“%20”。
3、鉴于以上两点,我们需要利用HttpUtility.UrlEncode,重新封装一个C#编码方法,与JS中encodeURIComponent编码对应起来。
/// <summary> /// 小写转大写,特殊字符特换 /// </summary> /// <param name="strSrc">原字符串</param> /// <param name="encoding">编码方式</param> /// <param name="bToUpper">是否转大写</param> /// <returns></returns> private string UrlEncode(string strSrc, System.Text.Encoding encoding, bool bToUpper) { System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); for (int i = 0; i < strSrc.Length; i++) { string t = strSrc[i].ToString(); string k = HttpUtility.UrlEncode(t, encoding); if (t == k) { stringBuilder.Append(t); } else { if (bToUpper) stringBuilder.Append(k.ToUpper()); else stringBuilder.Append(k); } } if (bToUpper) return stringBuilder.ToString().Replace("+", "%20"); else return stringBuilder.ToString(); }