wml在文本框中输入中文关键字搜索时,服务端获取到的值总是乱码,该如何解决? 现提供一个客户端对关键字编码,服务端再解析的方法,应该可以完美的解决这一问题。 wml文件: <?xml version=”1.0″ encoding=”GB2312″?> <!DOCTYPE wml PUBLIC “-//WAPFORUM//DTD WML 1.1//EN” “http://www.wapforum.org/DTD/wml_1.1.xml“> <wml xml:lang=”zh-cn”> <card id=”card1″ title=”卡片1″> <!–提交到其他页面或服务端示例–> <do type=”accept”> 输入值: <input type=”text” name=”txtKey” maxlength=”20″/><br/> <go href=”hol.wmls#check()” method=”post”> 搜索 </go> </do> </card> </wml> Wmlscript文件(hol.wmls): extern function check() { var x = WMLBrowser.getVar(“txtKey”); var xx = URL.escapeString(x); var para = “skey=” + xx; WMLBrowser.go(“so.aspx?”+para); } 服务端aspx.cs文件内容: private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 string url = Request.RawUrl; string key = QryStrUtil( url, “skey”); key = UnEscapeString (key); } 另外还有两个方法: /// <summary> /// 获取原始Url中的制定参数的值 /// </summary> /// <param name=”sRawUrl”>原始Url</param> /// <param name=”sKey”>参数</param> /// <returns>值</returns> private string QryStrUtil (string sRawUrl, string sKey) { string sValue = string.Empty; int index = sRawUrl.IndexOf(?); if (-1 != index && -1 != sRawUrl.IndexOf(=)) { sRawUrl = sRawUrl.Substring(index + 1, sRawUrl.Length – index – 1); string[] asParaInfo = sRawUrl.Split(&); string _key = string.Empty; foreach(string sParaInfo in asParaInfo) { if (null == sParaInfo || string.Empty == sParaInfo) continue; index = sParaInfo.IndexOf(“=”); if (-1 == index) continue; _key = sParaInfo.Substring(0, index); if (_key == sKey) { sValue = sParaInfo.Substring(index + 1, sParaInfo.Length – index – 1); } } } return sValue; } /// <summary> /// 汉字编码反转换 /// </summary> /// <param name=”s”></param> /// <returns></returns> private string UnEscapeString(string s) { string sub1, sub2, sub3; while(-1 != s.IndexOf(%)) { sub1 = s.Substring(0, s.IndexOf(%)); sub2 = s.Substring(sub1.Length,6); sub3 = s.Remove(0, sub1.Length + sub2.Length); sub2 = sub2.Remove(0,1); string[] scode = sub2.Split(%); Byte[] bCodes = new byte[scode.Length]; for(int i=0; i<scode.Length; i++) { int sh,sl,val; string code = scode[i]; sh = Convert.ToInt32(code.Substring(0,1),16); sl = Convert.ToInt32(code.Substring(1,1),16); val = sh * 16 + sl; bCodes[i] = Convert.ToByte(val.ToString(),10); } sub2 = Encoding.GetEncoding(“gb2312”).GetString(bCodes); s = sub1 + sub2 + sub3; } return s; } 至此,该方法以全部完毕,Page_Load中得到的key就是原输入字符串的原形。 ―――――――――――――――――――――――――――――――――――― /// <summary> /// </summary> /// <param name=”s”></param> /// <returns></returns> public string EscapeString(string s) { string res = string.Empty; Byte[] bCodes = Encoding.GetEncoding(“gb2312”).GetBytes(s); ASCIIEncoding ascii = new ASCIIEncoding(); for(int i=0;i<bCodes.Length ;i++) { int val = bCodes[i]; val = (val < 0) ? val+256 : val; int sh,sl; sh = val/16; sl = val%16; res += “%”; res += Convert.ToString(sh,16); res += Convert.ToString(sl,16); } return res; } 注:该方法的wmlscript解释是。这个函数计算生成s t r i n g的一个新版本。在这个版本中, [ R F C 1 7 3 8 ]规定的特殊字符(非安全字符、保留字符和不可打印字符)被一个十六进制的转义序列取代,给定的字符串可以这样转义;这个函数可以不进行U R L分析。根据[ R F C 1 7 8 3 ]的规定,对于U n i c o d e字符集中编码等于或者小于0 x F F的特殊字符,使用双数字格式的转义序列% x x。
在这里提供EscapeString方法。
/// 汉字编码转换(该方法还不完美,会对字母及数字等编码)
细心的读者会发现,如果用EscapeString编码,再用UnEscapeString来解码,可能会错误。所以这里,仅对全角及中文字符编码即可。不过这里暂时不需要同时用到这两个方法,在此把这个方法加上,仅是对wmlscript的escapeString方法的原理进行一下说明。
http://www.cnblogs.com/lgamoy/archive/2007/01/03/610806.html
wml在文本框中输入中文关键字搜索时,服务端获取到的值总是乱码的解决方法_心得技巧教程
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » wml在文本框中输入中文关键字搜索时,服务端获取到的值总是乱码的解决方法_心得技巧教程
相关推荐
-      经典收藏:网页页面常用的特殊符号_心得技巧教程
-      用html和css写出漂亮正规的blog_心得技巧教程
-      网站页面的均衡规划与选择_心得技巧教程
-      一个网友观点:两年以来使用div排版的经验_心得技巧教程
-      photoshop制作“非主流”彩虹色调照片_photoshop教程
-      禁止查看网页源代码方法总结_心得技巧教程
-      左右图片循环滚动停顿一下后继续_心得技巧教程
-      图片左右循环连续滚动代码,解决marquee的留白问题 _心得技巧教程