1. 程式人生 > >url引數中有+、空格、=、%、&、#等特殊符號的處理

url引數中有+、空格、=、%、&、#等特殊符號的處理

url引數中有+、空格、=、%、&、#等特殊符號的問題解決?
解決辦法:
將這些字元轉化成伺服器可以識別的字元,對應關係如下:
URL字元轉義

+    URL 中+號表示空格                      %2B   
空格 URL中的空格可以用+號或者編碼           %20 
/   分隔目錄和子目錄                        %2F     
?    分隔實際的URL和引數                    %3F     
%    指定特殊字元                           %25     
#    表示書籤                               %23     
&    URL 中指定的引數間的分隔符             %26     
=    URL 中指定引數的值                     %3D

看看例項:
<input type="button" value="aaa" id="btn_submit">
<script>
(function(){
	$("#btn_submit").click(function(){
		$.post("index.php/Layout/urlDemo",{
			id:2,
			sex:'&male'
		},function(data){
			console.log("First post:"+data);
			$.post("index.php/Layout/urlDemo?id=2&sex=&male",{},function(data){
				console.log("Second post:"+data);
				$.get("index.php/Layout/urlDemo",{
					id:2,
					sex:'&male'
				},function(data){
					console.log("First get:"+data);
					$.get("index.php/Layout/urlDemo?id=2&sex=&male",{},function(data){
						console.log("Second get:"+data);
					});
				});
			});
		});
	});

})(jQuery);
</script>

PHP中Action:
class LayoutAction extends Action {
	public function urlDemo(){
		//此處PHP並沒有執行解碼
		echo "id=".$_REQUEST['id'].";性別=".$_REQUEST['sex'];
	}
}
結果如下圖1:


轉碼後:
<script>
(function(){
	$("#btn_submit").click(function(){
		$.post("index.php/Layout/urlDemo",{
			id:2,
			sex:'&male'
		},function(data){
			console.log("First post:"+data);
			
			$.post("index.php/Layout/urlDemo?id=2&sex="+encodeURIComponent('&male'),{},function(data){
				console.log("Second post:"+data);
				$.get("index.php/Layout/urlDemo",{
					id:2,
					sex:'&male'
				},function(data){
					console.log("First get:"+data);
					
					$.get("index.php/Layout/urlDemo?id=2&sex="+encodeURIComponent('&male'),{},function(data){
						console.log("Second get:"+data);
					});
				});
			});
		});
	});
})(jQuery);
</script>
結果如下圖2:


jQuery ajax封裝的get()和post(),已經對特殊字元"&"等做了處理:
看看如下正則:
rprotocol = /^\/\//,
rquery = /\?/,
rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
rselectTextarea = /^(?:select|textarea)/i,
rspacesAjax = /\s+/,
rts = /([?&])_=[^&]*/,
rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/;

// try replacing _= if it is there
ret = s.url.replace(rts, "$1_=" + ts);
// if nothing was replaced, add timestamp to the end
s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&": "?") + "_=" + ts: "");
最後附:
javascript 編碼和解碼函式:

1)encodeURI():
a>主要用於整個URI
b>對空格進行編碼
c>不會對本身屬於URI的特殊字元進行編碼,例如":","/","?","#"

2)encodeURIComponent():
a>主要用於URI中的某一段
b>會對發現的任何非標準字元進行編碼

3)escape():
a>不會對 ASCII 字母和數字進行編碼,
b>不會對下面這些 ASCII 標點符號進行編碼: * @ - _ + . / 
c>其他所有的字元都會被轉義序列替換。
d>ECMAScript v3 反對使用該方法,應用使用 decodeURI() 和 decodeURIComponent() 替代它。
<script type="text/javascript">
//Visit%
[email protected]
@@School%21 console.log(escape("Visit [email protected]@@School!")); //%3F%21%3D%28%29%23%25%26 console.log(escape("?!=()#%&")) </script>

相關推薦

url引數+空格=%&#特殊符號的問題解決

url出現了有+,空格,/,?,%,#,&,=等特殊符號的時候,可能在伺服器端無法獲得正確的引數值,如何是好? 解決辦法 將這些字元轉化成伺服器可以識別的字元,對應關係如下: URL字元轉義 用其它字元替代吧,或用全形的。 +    URL 中+號表示空格    

url引數+空格=%&#特殊符號處理

url引數中有+、空格、=、%、&、#等特殊符號的問題解決? 解決辦法: 將這些字元轉化成伺服器可以識別的字元,對應關係如下: URL字元轉義 + URL 中+號表示空格 %2B 空格 URL中的空格可以用+號

前端傳遞url引數中文,後端傳過來的亂碼,解決方案

一、問題重現: 原始碼:用get方式傳遞 @ResponseBody @RequestMapping(value = {"/findGroupByGroupName/{batchNo

url參數+空格=%&#特殊符號的問題解決

amp 其它 分隔符 url參數 表示 轉化 無法 編碼 轉義 url出現了有+,空格,/,?,%,#,&,=等特殊符號的時候,可能在服務器端無法獲得正確的參數值,如何是好?解決辦法將這些字符轉化成服務器可以識別的字符,對應關系如下:URL字符轉義 用其它字符替代

Url引數出現+空格=%&#字元的解決辦法

Url出現了有+,空格,/,?,%,#,&,=等特殊符號的時候,可能在伺服器端無法獲得正確的引數值,抑或是造成不能正常下載檔案(作為Download Url時候),如何是好?解決辦法:就是需要將這些字元轉化成伺服器可以識別的字元;但是為何Url中有這

MySQL資料庫欄位型別是日期時間的插入語句的寫法處理

MySQL資料庫中,與時間有關的型別有 DATE,TIME,TIMESTAMP: 時間戳mysql> create table ts(f1 TIMESTAMP); Query OK, 0

URL引數如果+(加號)要對引數進行編碼,後臺取到的加號才不會變為空格

後臺對引數進行編碼的方法:URLEncoder.encode(str); 後臺取引數值時直接寫:String strFileCode = request.getParameter("filecode");即可取得編碼後的值。 附: java沒有方法對應javascript

Linux&&&|||特殊符號

@Author : Spinach | GHB @Link : http://blog.csdn.net/bocai8058 && 和 & & 表示任務後

URL引數加號傳值的問題(URL特殊字元)

URL特殊字元需轉義 空格換成加號(+)   正斜槓(/)分隔目錄和子目錄   問號(?)分隔URL和查詢   百分號(%)制定特殊字元   #號指定書籤   &號分隔引數   轉義字元的原因:  如果你的表單使用get方法提交,並且提交的引數中有“&”等特殊符的話,如果不做處理,在serv

URL引數&和+被轉成空格

     在ajax傳輸密碼串的時候,密碼總是報錯,檢視日誌發現密碼串有很多的空格,檢視在非ajax中傳輸的密碼串,發現密碼串中的&和+都被轉義成了空格。       檢視網上的資料[1]發現   web開發中通過問號(?)方式在瀏覽器位址列中傳值時。瀏覽器是通

前端 url 引數提交特殊字元 的解決方法

用  JavaScript encodeURIComponent() 函式 定義和用法 encodeURIComponent() 函式可把字串作為 URI 元件進行編碼。 語法 encodeURIComponent(URIstring)

模糊查詢支援引數*和?這樣的sql萬用字元

if(val.getPlateNo()!=null && !"".equals(val.getPlateNo())) {             String plateNo = val.getPlateNo();             if(plateNo

手機號隱藏中間四位使用者名稱處理銀行卡擷取後四位敏感資訊處理工具類

在我們平常開發中,我們有時候需要對使用者名稱、手機號等資訊進行一些敏感資訊的處理(如:王小五 →王*五),還有銀行卡擷取後四位等,這裡我整理成了一個工具類,分享給大家! /** * 敏感資訊處理工具類 * @author Zhang */ public final c

使用springmvc從頁面獲取資料,然後根據獲得的引數資訊進行修改,如果修改的資料含有不是基本資料型別的引數。比如傳的引數Date型別的資料時,需要我們進行引數型別轉換。

1.1 需求   在商品修改頁面可以修改商品的生產日期,並且根據業務需求自定義日期格式。 1.2 需求分析   由於日期資料有很多格式,所以springmvc沒辦法把字串轉換成日期型別。所以需要自定義引數繫結。前端控制器接收到請求後,找到註解形式的處理器介面卡,對RequestMapping標記的方法進

android開發post請求引數陣列引數

用了接近兩天終於完美找到方法!!! 話說,訪問伺服器一般用get請求,在url中拼接引數即可;或者post請求json物件也好呀,這次的介面可神奇了—— post方式訪問+請求引數為字串和陣列(數組裡面暫時只有一個物件)! android主流網路請求框架有:okhttp

url地址特殊符號“引號”引發的錯誤

一、問題描述 微信網頁授權時,在本地測試已經通過,預釋出後,出現死迴圈跳轉,get獲取的state引數為空 二、問題解決 訪問路徑 q1.pincn.com:82/inditexcareers/wxauth?state=1&requestu

MyBatis 和 ibatis的動態SQL語句配置符號,不相容大於號小於號特殊符號問題

在XML對映SQL的檔案中,很多情況下會使用到大於號、小於號等特殊符號,這時候如果不進行控制是無法編譯通過的,這時候需要用到<![CDATA[  ]]>符號進行說明,將此類符號不進行解析,還有一種解決方法就是使用轉移字元,如,案例2,其實,這個問題不止在My

JAVA的可變引數引數三個點

許多Java新人在看到下面的這段程式碼的時候,都會問一個問題:dealArray方法裡那三個小點點是什麼啊? [java] view plaincopyprint? publicclass TestVarArgus {       publicstatic

js實現對url引數數字字母的簡單加解密

function compile(code) { var c=String.fromCharCode(code.charCodeAt(0)+code.length); for

如何解決Http請求引數加號變空格問題

問題描述: 當使用.NET編寫Winform程式,構建Http Post 請求,並傳遞若干引數給遠端伺服器時,如果引數中包含加號'+'等符號時,http請求傳送後,伺服器收到並解析時,加號會被解碼為空格。 舉例說明: 若引數中含有:fileName = "[宮崎駿作品全集+