1. 程式人生 > >Http請求特殊符號變空格的問題解決

Http請求特殊符號變空格的問題解決

今天在除錯客戶端向伺服器傳遞引數時,url中的引數值出現+,空格,/,?,%,#,&等特殊符號的時候就自動變成空格,

在伺服器端無法獲得正確的引數值

解決方法如下:

URL字元轉義                                        對應的16進位制字符集編碼
 +    URL 中+號表示空格                              %2B   
空格 URL中的空格可以用+號或者編碼                      %20 
/   分隔目錄和子目錄                                  %2F     
?    分隔實際的URL和引數                              %3F     
%    指定特殊字元                                     %25     
#    表示書籤                                        %23     
&    URL 中指定的引數間的分隔符                        %26  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. 方法一、修改客戶端,將客戶端帶“+”的引數中的“+”全部替換為‍“%2B”,這樣引數傳到伺服器端時就能得到“+”了。
  2. 方法二、修改伺服器端,將空格替換為“+”,這種方式只適用於引數中有‍“+”沒有空格的情況。 
    例子:
String a = reuqest.‍getParameter("clientStr")‍.replace(' ','+'); 
  • 1

這種方法不建議使用,因為客戶端傳過來的空格引數有可能是其他特殊字元,如果將空格全替換成 ‘+’ 會導致結果不對。

  1. 方法三、修改伺服器端,將獲取引數的方法由‍reuqest.‍getParameter改為‍request.getQueryString().substring(0),然後對得到的字串進行解析。 
    例子:
String a =request.getQueryString().substring(0); 
  • 1

如果客戶端為clientStr=test+OK,那麼a的值為‍clientStr=test+OK,需要再解析一下, 
a=a.‍substring(10);得到a的值為‍test+OK。

  1. 方法五,在安卓裡面post請求的時候最好把請求引數放到body裡面就不會出現這些問題了。
  2. 方法六,
java    URLEncoder.encode(key, "utf8");