wml在文本框中输入中文关键字搜索时,服务端获取到的值总是乱码的解决方法。...
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就是原输入字符串的原形。
――――――――――――――――――――――――――――――――――――
在这里提供EscapeString方法。
/// <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;
}
细心的读者会发现,如果用EscapeString编码,再用UnEscapeString来解码,可能会错误。所以这里,仅对全角及中文字符编码即可。不过这里暂时不需要同时用到这两个方法,在此把这个方法加上,仅是对wmlscript的escapeString方法的原理进行一下说明。
注:该方法的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。
转载于:https://www.cnblogs.com/lgamoy/archive/2007/01/03/610806.html
wml在文本框中输入中文关键字搜索时,服务端获取到的值总是乱码的解决方法。...相关推荐
- html js文本框文字列出,js实现文本框中输入文字页面中div层同步获取文本框内容的方法...
这篇文章主要介绍了js实现文本框中输入文字页面中div层同步获取文本框内容的方法,实例分析了javascript操作dom元素的技巧,需要的朋友可以参考下 本文实例讲述了js实现文本框中输入文字页面中 ...
- html 文本框 无法输入,无法在HTML文本框中输入任何东西
所以我试图创建一个文本框(名为SearchUp),我可以在其中搜索名称.然而,它不允许我输入任何奇怪的东西,因为我的所有其他文本框都可以工作.我希望有人能够帮助我解决这个问题.谢谢.无法在HTML文本 ...
- 编写一程序,有2个文本框,在第一个文本框中输入一个整数,当焦点从第一个文本框离开时,第二个文本框将显示这个数的绝对值(使用FocusListener)。
编写一程序,有2个文本框,在第一个文本框中输入一个整数,当焦点从第一个文本框离开时,第二个文本框将显示这个数的绝对值(使用FocusListener). import javax.swing.*; i ...
- [html] 怎样在文本框中禁用中文输入法?
[html] 怎样在文本框中禁用中文输入法? 用文本框的 ime-mode css 属性松开键时检查文本框的的值,只保留 Unicode 编码在 0 - 255 的字符把所有双字节字符替换为空把中文字 ...
- JS 控制文本框只能输入中文、英文、数字与指定特殊符号(屏蔽表情输入)
onkeyup:释放键盘事件 onpaste:粘贴事件 oncontextmenu :鼠标右击事件 控制这三种事件的输入 οnkeyup="this.value=this.value.rep ...
- Textbox控件禁止用户向文本框中输入文字
在Winform程序中,Textbox控件,如何禁止用户向文本框中输入文字,而只是可以通过程序来写入内容 选择这个控件的属性,在事件列中找到KeyPress,双击,生成相应的事件监听方法,加入代码e. ...
- html文本框超出范围,ppt出现文本框中输入文字超出文本框范围的详细操作
今天小编讲解了在ppt出现文本框中输入文字超出文本框范围步骤,下文就是关于ppt出现文本框中输入文字超出文本框范围的教程,一起来学习吧. ppt出现文本框中输入文字超出文本框范围的详细操作 首先,打开 ...
- html输出计算结果到文本框,在文本框中输入两个操作数和选择运算符后,在页面上显示输出结果...
需求说明: 在文本框中输入两个操作数和选择运算符后,在页面上显示输出结果 实现思路: 单击"计算"按钮后,删除两个文本框左右两边的空格,删除空格后,判断输入框中是否都输入了内容,只 ...
- python设计程序输出一个带文本框和图像的窗体_设计一个文本框 用户在文本框中输入什么 窗体标题就同步显示什么 怎么设计啊...
展开全部 要求 1.掌握算法的基本概念. 2.掌握基本数据结构及其操作. 3.掌握基本排序和查找算法. 4.掌握逐e68a8462616964757a686964616f31333264626533步 ...
最新文章
- History(历史)命令用法
- discoGAN 论文解读
- Oracle入门(十四.9)之迭代控制:WHILE和FOR循环
- python numpy教程_Python中的Numpy入门教程
- 类的加载顺序(例题)
- 高通msm8953 Android7.1支持Audio设备列表(十二)
- SQL Sever数据库的基本操作和它的建立
- 【教程向】如何用L298N电机驱动模块与Arduino实现PWM调速
- CuteFTP 中文免费版v9.3.0.3
- Android之常见UI控件
- Wet-Ra: Monitoring Diapers Wetness with Wireless Signals
- hutool 读取扩展名文件_好多公司都要用的一些知识点Office办公软件、文件加密、文件扩展名!...
- matlab 画qpsk眼图,MATLABQPSK在AWGN信道下的仿真
- 2_PY基本数据类型
- Java从零打造企业级电商项目实战 项目初始化
- 加快BITMAP像素访问速度,取代GetPixel
- 模板有函数模板和类模板,这个在上学期的java课里面就学了,C++应该是一样的。
- 第二集 第一魂环 第十章
- 之杰的机器学习笔记:1.机器学习概述
- 鼠标经过——图片放大效果
热门文章
- java 时间片_Java 实现--时间片轮转 RR 进程调度算法
- javascript时间处理函数
- POJ 1507 Commedia dell' arte 未完成
- C#实战021:OleDb操作-新增Excel中的sheet工作表
- Java实习生面试题集锦
- 网络编程---Ip和端口号
- 利用STM32CubeMX软件生成USB_HOST_CDC驱动ME909s-821ap(4G通信模块)
- Zookeeper源码阅读(一)Jute和传输协议
- 4 Openstack-Ussuri-Keystone集群部署-centos8
- 103页智慧环保云平台建设和运营方案