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

2021-06-23 00:37:11 字數 1664 閱讀 6833

url特殊字元需轉義 

空格換成加號(+)   

正斜槓(/)分隔目錄和子目錄   

問號(?)分隔url和查詢   

百分號(%)制定特殊字元   

#號指定書籤   

&號分隔引數   轉義字元的原因: 

如果你的表單使用get方法提交,並且提交的引數中有「&」等特殊符的話,如果不做處理,在service端就會將&後面的作為另外乙個引數來看待。例如 

表單的action為list.jsf?act=go&state=5 

則提交時通過request.getparameter可以分別取得act和state的值。 

如果你的本意是act='go&state=5'這個字串,那麼為了在服務端拿到act的準確值,你必須對&進行轉義 

url轉義字元原理: 

將這些特殊的字元轉換成ascii碼,格式為:%加字元的ascii碼,即乙個百分號%,後面跟對應字元的ascii(16進製制)碼值。例如 空格的編碼值是"%20"。 

url特殊符號及對應的十六進製制值編碼:   

+  url 中+號表示空格 %2b   

空格 url中的空格可以用+號或者編碼 %20   

/ 分隔目錄和子目錄 %2f    

? 分隔實際的 url 和引數 %3f    

% 指定特殊字元 %25    

# 表示書籤 %23    

& url 中指定的引數間的分隔符 %26    

= url 中指定引數的值 %3d  

解決方法如下(以+號為例):

方法一、修改客戶端,將客戶端帶「+」的引數中的「+」全部替換為?「%2b」,這樣引數傳到伺服器端時就能得到「+」了。

方法二、修改伺服器端,將空格替換為「+」,這種方式只適用於引數中有?「+」沒有空格的情況。

例子:

string a = reuqest.getparameter("clientstr").replace(' ','+');

如果客戶端為clientstr=test+ok,那麼a的值為test+ok;

方法三、修改伺服器端,將獲取引數的方法由?reuqest.getparameter改為?request.getquerystring().substring(0),然後對得到的字串進行解析。

例子:

string a =request.getquerystring().substring(0);

如果客戶端為clientstr=test+ok,那麼a的值為?clientstr=test+ok,需要再解析一下,

a=a.?substring(10);得到a的值為?test+ok。

附:乙個js,用來轉義url中特殊字元的。

function urlencode(sstr)

如果你是用replace()時,使用name.replaceall("\\ ","%20");

st_fname=name.replaceall("\\ ","%20");  st_fname=dst_fname.replaceall("\\+","%2b");

URL引數的加號等特殊字元的處理

之前沒有遇見過,這樣的問題,所以都沒有考慮過。有乙個引數裡面有乙個 號,接收的時候 不見了,如address 上海黃埔 上海浦東 接收的時候變成 上海黃埔上海浦東 了。string url aspx?xx xx name contextwai.server.urlencode name haha c...

函式的引數傳值

函式的引數傳值主要分為 傳值引數,傳引用引數。1.傳值引數 當初始化乙個費引用型別的變數時,初始值被拷貝給變數。此時,對變數的改動不會改變和影響初值。int a 1 int b 2 swap a,b 則不能交換他們的值。但當時指標傳值時 指標傳值的行為和非引用型別傳值一樣,當執行指標拷貝時,拷貝的是...

C C 語言中引數的傳值問題

c c 語言中引數的傳值一直比較含糊,今天在網上看到三個面試題的詳解,感覺講的很好,就拿來記下,方便學習和記憶。1.考題一 程式 如下 void exchg1 int x,int y int tmp tmp x x y y tmp printf x d,y d n x,y void main int...