小弟在js裡把有包含=號的字串利用encodeURIComponent轉換,再進行http request,打算讓php GET後再轉換回來。
但在http request的過程中,應該編成%3D的=號被自動轉回=號,所以php GET到的字串=號就自動消失。
請問各位前輩,在http request中自動將編碼過的部分轉回是正常的嗎?
請各位前輩解惑,謝謝。
我最近也遇到這問題,這個問題的專有名詞叫,
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 。一樣。
我要傳一個字串"pS55oiQIC4uLiDljrvjgIw="
用encodeURIComponent編成"pS55oiQIC4uLiDljrvjgIw%3D"
http request之後php收到的值卻是"pS55oiQIC4uLiDljrvjgIw"
我試了,用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)一直都在啊!!
<?php
echo $_GET["PARAM"];
?>
server端
你是用 parse_url() , parse_str() 的方式嗎?
目前是用rawurldecode()
但是我嘗試的結果,不使用rawurldecode()直接取值,也是只有取到pS55oiQIC4uLiDljrvjgIw。
不管是原本的=或編碼過的都不見了
這種要怎麼往裏面除錯呢? php內建的功能。那echo $_SERVER['QUERY_STRING']
比較原汁原味的 $_SERVER['QUERY_STRING'],
等號在嗎? 我得到 PARAM=pS55oiQIC4uLiDljrvjgIw%3D,
很難模擬你的情況。php 啟動xdebug 來偵錯嗎?
你client端怎麼傳呢?