首页学院源码字体下载软件电脑书| 素材图片模版壁纸酷站图标笔刷纹理|小游戏博客QQ表情投票计数器JoyRssMail
动态网站制作指南
首页|网络编程|站长之家|网页制作|图形图象|操作系统|冲浪宝典|软件教学|网络办公|手机学院|邮件系统|网络安全|认证考试
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网页制作 > 心得技巧

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


发表日期:2007-1-4 |


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

关注此文的读者还看过:
·如何隐藏网页中的层DIV
·用UltraEdit+正则表达式删除空行
·浅谈网页上显示日期的方法
·常用网页播放器代码
·WordPress 2.8 Beta1 新功能试用
·统计Google广告点击次数的方法
·下拉菜单遮挡层的解决方案
·过来人谈如何快速成为一名网页设计师
·为网站添加可以动态显示姓名文字的祝福页面
·网站301重定向代码集锦

浏览全部wml的内容 PS笔刷下载 39种不同语言在线翻译
文章搜索服务





邮件订阅服务
输入你的邮件地址,你将不会错过任何关于<心得技巧>的内容
Powered by JoyRssMail

网页制作文章分类

本月文章推荐
. 改进网站设计提供的有意的建议.
. 公司建站完全手册--网页色彩设计点.
. 网页制作中如何精确还原设计稿的几.
. 设计网页前端界面必备的技能.
. 修炼内功 优化网站的内部链接.
. Google的网站收录和排名.
. 谈谈xhtml的结构标签.
. 通过W3C XHTML1.0标准验证经验分享.
. 10分钟架设Blog实践.
. HTML 限制文本框只能输入数字 onke.
. 链接在Google搜索注册中的作用.
. 网页制作中经常用到的六则代码技巧.
. 解决网页下载速度慢的另一种方式.
. Windows主机用WordPress的设置技巧.
. IE不能自动选择UTF-8编码解决办法.
. 介绍三种网页播放器好代码.
. 更好利用光影的五个网页设计技巧.
. 给你的QQ在线状态配上个性化图标和.
. rel=nofollow互联网为超链接戴上安.
. HTML:关闭(离开)浏览器窗口前的 系.
. 网页制作:深入Table世界.
. 网页中防止表格被撑破的方法总结.
. 用UltraEdit+正则表达式删除空行.
. 符合web标准的网页中调用Flash的方.
. 分析(X)HTML Strict 下的嵌套规则.
. 教你如何去掉网页上的Flash动画虚线.
. 用HTML和CSS写出漂亮正规的BLOG.
. 慎用 XHTML 标签的自关闭写法.
. Google AJAX Search API新用途.
. Web Elements妙用:把Custom Search.
  最新网站源码 最新软件下载
2009-7-4 84网址站 v4.10
2009-7-4 仿webmasterhome 网站收录查询 v
2009-7-4 NOCC v1.8
2009-7-4 易和阳光购物商城 v1.4 Access F
2009-7-4 OK伯乐招聘求职系统
2009-7-3 MyBB v1.4.8
2009-7-3 miniBB v2.3
2009-7-3 Modoer多功能点评系统 v1.1.0 Bu
2009-7-3 Modoer多功能点评系统 v1.1.0 Bu
2009-4-4 SharePoint Designer 2007
2009-3-20 Internet Explorer 8 简体中文正
2009-3-20 Internet Explorer 8 简体中文正
2009-3-20 Internet Explorer 8 简体中文正
2009-3-20 Internet Explorer 8 简体中文正
2009-3-20 Internet Explorer 8 简体中文正
2009-3-20 Internet Explorer 8 简体中文正
2009-3-20 Internet Explorer 8 简体中文正
2009-3-20 Internet Explorer 8 简体中文正
  发表评论
姓 名: 验证码: [ 查看评论 ]
内 容:
 
站长工具:Google PR查询|网站速度测试|CSS在线编辑器|OPEN参数生成器|弹出式窗口代码产生器|密码登录生成器|在线按钮生成器|Meta标签生成器|邮箱图标在线生成|多色彩特效字代码生成器|网页代码调试器|在线FTP登陆|Flash取色器|配色代码对照表|配色辞典|CSS生成器|CSS在线压缩|广告代码|框架网页代码生成器|js/vbs加密|md5加密|进制转换|UTF-8 转换工具|在线调色板|Html转换js|Html转换asp|Html转换php|Html转换perl
实用工具:汉字翻译拼音|拼音字典|在线翻译|天气预报|火星文|在线网速测试|符号对照表|个税计算|公积金贷款计算|购房银行按揭利率计算|实时汇率查询换算|经典小工具|汉字简繁转换|普通单位换算|公制单位换算|生辰老黄历|国内电话区号|国家代码与域名缩写|文字加密解密|元素周期表|健康查询|世界时间|全国各地车牌查询|全国车辆交通违章查询|万年历|二十四节气|汉字横竖排版|手机号码查询|计算器|ip搜索
广告刊登 | 版权声明 | 联系我们 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号