分享
 
 
 

wml在文本框中输入中文关键字搜索时,服务端获取到的值总是乱码的解决方法

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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。

http://www.cnblogs.com/lgamoy/archive/2007/01/03/610806.html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有