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);
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一页12 下一页
上一篇:HTML:关闭(离开)浏览器窗口前的 系统提示 下一篇:target=_blank不符合标准?