首页 > 教程 > 关键词  > 正文

页面搜索显示乱码问题解决方法

2007-06-13 09:27 · 稿源:中国站长站

wml在文本框中输入中文关键字搜索时,服务端获取到的值总是乱码,该如何解决?现提供一个客户端对关键字编码,服务端再解析的方法,应该可以完美的解决这一问题。

wml文件:

以下为引用的内容:

<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "https://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。

举报

  • 相关推荐
  • AI之下,搜索获得“无限内容池”

    搜索引擎诞生20余年,其核心一直考验对于海量信息检索、分析、匹配以及呈现的能力。它一头是搜索技术,一头是内容池。 不夸张的说,如果搜索的能力是“巧妇”,可检索分析匹配的内容则是“米”,甚至在后搜索时代,搜索能力之间的差距在减小,用户有了更多的选择,但内容的数量和质量却参差不齐,用户搜索的体验大打折扣。 为了满足给用户更好的搜索体验,百�

  • 硬盘丢失了数据怎么恢复?硬盘数据恢复的6种方法

    文章分析了硬盘数据丢失的常见原因及恢复方法。数据丢失主要源于人为误操作、硬件故障、软件系统问题和环境因素四类。针对不同情况,介绍了6种恢复方法:回收站还原、系统版本回退、备份还原、Mac系统的TimeMachine、命令行操作以及专业数据恢复软件。其中专业软件如转转大师能深度扫描硬盘,支持多种文件格式恢复,操作简便且成功率高。文章强调数据丢失后应避免写入操作,根据实际情况选择合适恢复方式,并建议做好日常备份预防数据丢失。

  • 维谛Vertiv收购定制化机柜解决方案制造商

    维谛技术(Vertiv)宣布以2亿美元收购美国定制化机柜制造商Great Lakes,以强化其在高密度一体化基础设施解决方案领域的领导地位。此次收购将整合Great Lakes在高端定制化机柜领域的技术优势,帮助维谛为AI数据中心、边缘计算等场景提供更优化的预制化机柜解决方案。交易预计2025年第三季度完成,收购价约为Great Lakes 2026年预期EBITDA的11.5倍。通过整合,维谛将提升端到端基础设施服务能力,应对未来AI技术发展带来的复杂挑战。

  • 加码股东回报,海尔智家分红比例再提升3%

    海尔智家宣布2024年度分红方案,每10股派发现金红利9.65元(含税),分红比例从2023年的45%提升至48.01%,远超A股37.7%的平均水平。公司同时发布未来三年股东回报规划,承诺2025-2026年度分红比例不低于50%。这一举措源于其业绩双增长:2025年一季度营收同比增长10%,归母净利润增长15%,冰箱、洗衣机等核心产品线上线下市场份额均居行业第一。通过全球化布局和AI技术赋能,海尔在北美、东南亚等市场实现快速增长,并推出"AI之眼"等智能家电解决方案,构建智慧家庭生态。公司已完成多轮股份回购注销,彰显对长期价值的信心。

  • 登上央视的“神秘盒子”,内藏九号公司的”安全密码”

    九号公司在链博会展出的"小黑盒子"ECU(电子控制单元)引发关注。这款火柴盒大小的智能控制模块被称为"智能心脏",集成了无感解锁、智能启停、坡道辅助、TCS牵引力控制等多项安全技术。通过实时监测车辆状态和路况,ECU能主动调节动力输出,在湿滑路面、陡坡等场景下提升骑行安全性。九号长期深耕智能技术研发,将ABS等汽车级安全配置引入两轮电动车,推动科技普惠。其产品通过ECU实现了从解锁到骑行的全流程安全闭环,体现了"安全不是营销噱头,而是长期工程"的理念。

  • 10个客户,为什么9个都要选「自动对焦」读码器?

    文章介绍了工业生产线上传统固定焦距读码器面临的挑战:产品尺寸不一导致频繁失焦、传送带位置波动影响识别率、曲面包装二维码难以捕捉等问题。研祥金码智能读码器凭借毫秒级自动对焦技术,能实时调整镜头焦距,无论目标物远近或表面是否平整(如瓶身、褶皱包装袋等),都能清晰捕捉条码/二维码图像。该技术显著提高了读取成功率和准确性,简化了安装调试流程,适应柔性化生产需求,成为破解工业读码"距离困境"的利器。

  • 抖音低价加码酒旅,OTA群战升级

    继外卖补贴热战之后,酒旅也暗潮涌动。 最新消息是,抖音本地生活在暑期将投入亿元级对酒旅做补贴,联合华住、凯悦等酒店集团推出6 折订房优惠,新客专享价等。抵达用户的通道,除品牌酒店集团矩阵号、职人号直播间,还有抖音日历房。 针对酒旅行业的进击行动,抖音是今年的第三个玩家。 在此之前,京东于618 当天打出「三年0佣金」政策吸引酒店入驻,立志重构O

  • 最重要的搜索阵地,百度想誓死守住

    AI搜索的东风刮过两年,百度终于下决心,对自家搜索引擎“动刀子”。 7月2日,百度宣布开启十年来最大一次搜索改版,正式将搜索框改版成支持千字输入的“智能框”,从“给链接”跨越到了“给答案”。另外靠着智能体,百度搜索也进入了“解决任务”的阶段,并集成了AI写作、AI图片/视频生成等一系列服务。 当然,这还不够。在阿里夸克、字节豆包等产品不断往自家�

  • 韩国脑洞大开!带粘液的“人类鼻毛仿生过滤器” 可有效解决电脑灰尘问题

    灰尘沉积对电子设备有害,尤其是在需要良好散热的地方。尽管防尘过滤已成为现代PC和笔记本电脑的标配,但简单的网格结构在阻挡颗粒物 (PM) 方面效果不佳。 最近,韩国科学家一篇受粘液覆盖的鼻毛的天然过滤能力启发”的研究论文或许能提供一些答案。 这项研究概述了传统空气过滤器过滤效果不佳的问题,并提出了一种模拟人类鼻腔通道的过滤器,其内部填充了一层�

  • 激活校园文化新舞台!itc保伦股份智慧校园解决方案打造区域教育标杆!

    华南师范大学附属中学东莞长安学校(简称"华附长安学校")是华南师大附中参与建设的第二所九年一贯制公办学校,总投资12亿元,占地73838.34平方米,规划90个教学班,提供超4000个优质学位。学校传承华师附中"培养高素质现代人才"的办学宗旨,ITC为其量身定制智慧校园解决方案,包括专业音响系统、灯光系统、舞台机械系统等。报告厅采用ITC沉浸声系统,混响时间从2.5秒优化至1.2秒,显著提升语音清晰度。系统还配备声光影综合管理平台,实现一键操作专业级舞台效果。此外,ITC为多功能厅、体育馆等区域提供高品质音视频系统,助力学校打造兼具"华附基因、东莞品质、长安特色"的标杆示范校。