iT邦幫忙

0

javascript 的encodeURIComponent 在http request時自動被解碼?

小弟在js裡把有包含=號的字串利用encodeURIComponent轉換,再進行http request,打算讓php GET後再轉換回來。

但在http request的過程中,應該編成%3D的=號被自動轉回=號,所以php GET到的字串=號就自動消失。

請問各位前輩,在http request中自動將編碼過的部分轉回是正常的嗎?

請各位前輩解惑,謝謝。

fillano iT邦超人 1 級 ‧ 2017-10-30 17:37:24 檢舉
$_GET裡面的東西是解碼後才放進去的,但是我稍微測試了一下,並不影響正確性才對。
Rach iT邦新手 5 級 ‧ 2017-11-22 01:43:34 檢舉
等號碼不應該被編碼吧?
`param=${encodeURIComponent(JSON.stringnify(your_param))}`

1 個回答

1
timloo
iT邦研究生 2 級 ‧ 2017-10-30 17:15:29

我最近也遇到這問題,這個問題的專有名詞叫,
Percent-encoding.
我要把一些WHERE條件句常用的符號,如**() '' %,傳回後端,透過http request,
本來以為要自己轉換,後來如你發現的用encodeURIComponent,就會轉碼,傳給後端,
而後端不用處理,以jsp而言,直接用就可,不用處理。等號
=**,也正常啊,
可貼一下你要傳的值嗎?

我傳 UM_BD_DATA.BASEAREA >= 3000 ,用encodeURIComponent(UM_BD_DATA.BASEAREA >= 3000) 轉碼,再湊成query string 傳,是正常的。後端接的值也是 UM_BD_DATA.BASEAREA >= 3000 。一樣。

看更多先前的回應...收起先前的回應...
阿貓 iT邦新手 5 級 ‧ 2017-10-30 18:14:07 檢舉

我要傳一個字串"pS55oiQIC4uLiDljrvjgIw="
用encodeURIComponent編成"pS55oiQIC4uLiDljrvjgIw%3D"
http request之後php收到的值卻是"pS55oiQIC4uLiDljrvjgIw"

timloo iT邦研究生 2 級 ‧ 2017-10-31 11:29:06 檢舉

我試了,用php 來接

console.log( 'pS55oiQIC4uLiDljrvjgIw=');
      pms = encodeURIComponent('pS55oiQIC4uLiDljrvjgIw=');
      console.log( 'pms:'+pms);

      $.ajax({
      url: "getPcnt.php?PARAM="+pms,
      type: "GET",
      success:function(data){
          console.log(data);
      },
      dataType: "text"
      });

      });

等號(=,%3D)一直都在啊!!

timloo iT邦研究生 2 級 ‧ 2017-10-31 11:30:28 檢舉
<?php
 echo $_GET["PARAM"];
?>

server端

timloo iT邦研究生 2 級 ‧ 2017-10-31 11:32:17 檢舉

你是用 parse_url() , parse_str() 的方式嗎?

阿貓 iT邦新手 5 級 ‧ 2017-11-01 10:01:44 檢舉

目前是用rawurldecode()

阿貓 iT邦新手 5 級 ‧ 2017-11-01 10:06:01 檢舉

但是我嘗試的結果,不使用rawurldecode()直接取值,也是只有取到pS55oiQIC4uLiDljrvjgIw。

不管是原本的=或編碼過的都不見了

timloo iT邦研究生 2 級 ‧ 2017-11-01 12:10:24 檢舉

這種要怎麼往裏面除錯呢? php內建的功能。那
echo $_SERVER['QUERY_STRING']

比較原汁原味的 **$_SERVER['QUERY_STRING']**,

等號在嗎? 我得到 PARAM=pS55oiQIC4uLiDljrvjgIw%3D

很難模擬你的情況。php 啟動xdebug 來偵錯嗎?

timloo iT邦研究生 2 級 ‧ 2017-11-01 12:12:16 檢舉

你client端怎麼傳呢?

阿貓 iT邦新手 5 級 ‧ 2017-11-01 13:49:24 檢舉

client端用js,XMLHttpRequest POST,送出去的Form Data都是正常的。

php的部分因為server不是apache所以$_SERVER['QUERY_STRING']動不了

fillano iT邦超人 1 級 ‧ 2017-11-05 08:53:44 檢舉

不是apache,那是?

fillano iT邦超人 1 級 ‧ 2017-11-05 09:17:30 檢舉

另外,base64編碼字串尾巴的=只是方便解碼,並不是真的需要。

我要發表回答

立即登入回答