2026年9月3日 星期四

url特殊字元(#)的處理 -*.js encodeURIComponent , encodeURI的用法 -*.cs Uri.EscapeDataString Uri.UnescapeDataString 的用法

 目的:  encodeURIComponent , encodeURI的用法
實際範例: 參考 V60202 - get_SPPick(string SP = "", string WH="" ,)

 處理說明: 1>encodeURIComponent 

                        → 用於單一參數值,會編碼大部分特殊字元(包括 ?, &,#,=,庫房)

Ex: encodeURIComponent(17#) --> 17%23

2>encodeURL--> 用於整個 URL,只編碼不合法字元,但會保留 ?, &, #,=,字元

Ex: encodeURL(17#) --> 17# , 保留#
3> *.cs    Uri.UnescapeDataString  --> 它會把 %xx 格式的字元還原成原始文字
                           Ex: Uri.UnescapeDataString(17%23) -- 17#
                                  Uri.UnescapeDataString(%E5%BA%AB%E6%88%BF) -- 庫房
                  4> *.cs    Uri.escapeDataString  --> 它會把 原始文字 編碼成 %xx 格式
                           Ex: Uri.escapeDataString('17#') --  17%23
                                  Uri.escapeDataString('庫房') --  %E5%BA%AB%E6%88%BF

                  5>url參數傳至後端 [HttpPost]  --> 會自動解碼, %xx --> 字元(%23 --> #)
                        [HttpPost] 
                        //前端 WH: 17%23 --> 後端 WH: 17#
                        //前端 WH: 17%2523 --> 後端 WH: 17%23 (原本 %23去編碼 --> 還原成 %23)
                        public dynamic get_SPPick(string SP = "", string WH="" ,int isComplete = 0)
                       {
                          
                          string Tmp_Sql = " SELECT  DISTINCT SP , WH  "
                                                    + "  FROM   AMM_COMP "
                                                    + "  WHERE  1=1 "
                                                    + "    AND      SP IS NOT NULL "
                                                    + "    AND      STAT='A'   ";
                        if (!myfunc.checkisnull(WH))
                       {
                           //WH: 17#      , Uri.UnescapeDataString(WH) --> 17#
                           //WH: 17%23, Uri.UnescapeDataString(WH)  --> 17#
                           WH = Uri.UnescapeDataString(WH);
                           Tmp_Sql = Tmp_Sql + " AND    WH=" + myfunc.AA(WH);
                        }                
                       Tmp_Sql = Tmp_Sql + " ORDER  BY SP ";
                       string n = funId + "s_SP";
                       DataSet ds = setupPickDs(n, Tmp_Sql, new string[] { "AMM_COMP" });
                       if (SP != null && !SP.Equals(""))
                      {
                        if (isComplete == 1)
                       {
                           ds = getPickDsbyCondi(n, "SP='" + SP + "'");
                        }
                        else
                       {
                         ds = getPickDsbyCondi(n, "SP  LIKE '%" + SP + "%'");
                        }
                  }
              return ds;
        }  // end of  get_SPPick


沒有留言:

張貼留言