2023年5月16日 星期二

http傳送 字串編碼 & 字串解碼 - HttpUtility.UrlEncode(String) , UrlDecode(String) - Cookie

 目的: 在 Http的資料流程, 傳遞空白/標點符號之類的字元, 在接收端可能會錯誤解譯
          所以必需先 URL編碼 , 將URL中不允許的字元(空白,<>,...)編碼
          --> 當字元內嵌在 URL 中傳輸的文字區塊時,
                 這些字元 < and > 會編碼為 %3c 和 %3e

處理說明:  1>TextArea 欄位,以 "\r\n" 換行

                 2>由後端組合好的字串, 必需先 UriEncode ,再送至前端 

                 3>還原後端的字串,必需先 decodeURI , 

                      -->  但空白,可能變成+




1>*.cs
      if (Tmp_TYPEAF == "6")
          { Tmp_content6 = Tmp_content6 + "提領編號:" + Tmp_GONOAF + ",交修單號:" + Tmp_RPNOAF + "\r\n"; }
      else
          { Tmp_contentnot6 = Tmp_contentnot6 + "提領編號:" + Tmp_GONOAF + ",交修單號:" + Tmp_RPNOAF + "\r\n"; }
      MyCookie = new HttpCookie("V20302_content6", HttpUtility.UrlEncode(Tmp_content6));
      HttpContext.Current.Response.Cookies.Add(MyCookie);


2>*.js
   var r_V20302_contentnot6 = r_cookies('V20302_contentnot6');
   var Tmp_sub_contentnot6 = "已經接收器材:\r\n"
        + r_V20302_contentnot6 + "\r\n"
        + "請至 AMM系統 V20303: 進廠檢查資料登錄做後續處理。\r\n";  
    Ext.getCmp("sub_Subjext").setValue(Tmp_sub_Subjectnot6);
    Ext.getCmp("sub_content").setValue(Tmp_sub_contentnot6);    


function r_cookies(i_params) {
    var cookie_token = Ext.util.Cookies.get(i_params);
    return decodeURIComponent(escape(cookie_token));
}

PS1:
在 client 端送資料給 server 端時,若使用 query string 的方式,格式通常是這樣 https://www.sample.com?foo=abc&bar=def,而若當中有空白的話,像是 foo=a b c a、b、c 中間有空白,則會有以下加號(+)和 %20 兩種情況(可參考這裡)。

PS2: https://www.cythilya.tw/2020/07/24/encode-decode/
const encodedStr = encodeURIComponent('這是中文字串'); // encodedStr 得到 %E9%80%99%E6%98%AF%E4%B8%AD%E6%96%87%E5%AD%97%E4%B8%B2
const decodedStr = decodeURIComponent(encodedStr); // decodedStr 得到 這是中文字串

沒有留言:

張貼留言