国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

wml在文本框中輸入中文關鍵字搜索時,服務端獲取到的值總是亂碼的解決方法

2024-04-27 13:56:15
字體:
來源:轉載
供稿:網友

wml在文本框中輸入中文關鍵字搜索時,服務端獲取到的值總是亂碼,該如何解決?

現提供一個客戶端對關鍵字編碼,服務端再解析的方法,應該可以完美的解決這一問題。

wml文件:

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "

<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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湘潭市| 尤溪县| 镇康县| 清新县| 隆德县| 水富县| 新泰市| 元朗区| 利辛县| 临澧县| 肥城市| 岢岚县| 广平县| 长武县| 随州市| 新野县| 怀柔区| 光泽县| 安新县| 寻乌县| 长乐市| 永修县| 简阳市| 金华市| 区。| 湖北省| 汕头市| 新宁县| 衡山县| 蚌埠市| 松江区| 湘潭县| 阿克陶县| 都安| 噶尔县| 怀柔区| 峨山| 张北县| 金塔县| 广河县| 南阳市|