1. 程式人生 > >php接收+號等特殊字元引數的問題

php接收+號等特殊字元引數的問題

記錄一個有些奇怪的問題,關於引數“+”號在傳輸過程中是否被轉義。

1、get方式請求

使用get方式,php收到的引數中“+”會變為空格,看說明應該是執行了urldecode,如果需要恢復為“+”號,需要對接收到的引數進行urlencode。
通過使用curl和瀏覽器方式,接收到的引數均把+號轉為了空格。
請求地址為http://ip/xx?aa=+889
使用 $_REQUEST['aa'] 接收到的引數值為“ 889”,引數+號被轉為了空格,如果希望得到原樣的+889,則需要使用urlencode($_REQUEST)來進行獲取。

但是,如果傳輸的時候,使用的是http://ip/xx?aa=%2B889

,即自行對+號進行了url編碼,那$_REQUEST接收到的就是+889的引數。

2、post方式請求

使用post方式,curl執行接收到的引數也是將+號轉為了空格;但是通過html form模擬的post,接收到的卻是完整的+號(form提交的時候自動對引數進行了url編碼?)。
接收引數使用$_POST。
如果在curl的時候,post的引數使用編碼後的%2B889,那php接收到的就是+889

3、結論

因此,得出一個結論:
php在接收到引數的時候,會自動對引數進行一次urldecode解碼操作,因此,如果傳送的引數未進行url編碼,那特殊字元(例如+號)就會被解碼為空格,導致引數接收不正確。


如果希望php正確的接收到包含特殊字元的引數,那client與server之間就需要有一個約定,例如client傳送的引數都是經過url編碼後的引數,這樣server接收到的引數就是正確的引數。

相關推薦

php接收+特殊字元引數的問題

記錄一個有些奇怪的問題,關於引數“+”號在傳輸過程中是否被轉義。 1、get方式請求 使用get方式,php收到的引數中“+”會變為空格,看說明應該是執行了urldecode,如果需要恢復為“+”號,需要對接收到的引數進行urlencode。 通過使用

前端傳遞引數包含+%特殊字元的時候後臺獲取不到的問題

 public static String stringUncode(String param) {         if (param != null && !param.trim()

使用標籤呼叫struts2的action、傳遞動態引數、以及引數中出現加號特殊字元的處理方法

首先說一下我的web應用是通過<a>標籤呼叫struts2框架下的一個action,給該action傳遞一個引數,然後action通過這個引數進行相應的處理。 方法是: <a href="../actionName?phoneName=XXX">點選

SQL去除資料庫表中tab、空格、回車符特殊字元的解決方法

原文: SQL去除資料庫表中tab、空格、回車符等特殊字元的解決方法 按照ASCII碼, SELECT char(64) 例如64 對應 @,則 SELECT REPLACE('[email protected]', CHAR(64), 'kk'); 則結果為 abckkqq.

PHP字串中去除特殊字元

去除字串特殊字元的函式有trim、ltrim、rtrim、str_replace 1、trim--去除字串首尾處的空白字元(或其他字元) 語法: String trim(string $str[,string $charlist]) String trim:返回字串型別 stri

使用URLDecoder.decode解析字串含有"+","+"這個特殊字元會自動轉換成空格

1.問題:       在使用url的時候,一般從網路或是伺服器得到的一個url地址一般都是經過encode編碼過(一般是使用URLEncoder.encode),或者是我們要給服務端傳遞url引數,直接使用的話,到服務端去解析的時候(應該服務端就是URLEnc

sqoop匯入hive資料時對換行特殊字元處理

使用場景:  公司大資料平臺ETL操作中,在使用sqoop將mysql中的資料抽取到hive中時,由於mysql庫中默寫欄位中會有換行符,導致資料存入hive後,條數增多(每個換行符會多出帶有null值得一條資料),導致統計資料不準確。 解決辦法: 利用一下兩個引數

Android EditText 自定義密碼樣式,密碼轉換為*特殊字元

import android.text.method.PasswordTransformationMethod; import android.text.method.TransformationMethod; //設定密碼轉換 editText.setTransforma

matlab 引號,逗號,百分號特殊字元的書寫

今天在網上看到的,覺得不錯,特意抄下來。 1、空格、逗號和分號: 建立矩陣時, 水平的分隔符用空格或者逗號, 垂直的分隔符用分號(相當於矩陣內部的換行符)。 寫命令列時, 用分號結尾的命令不顯示返回值 去掉分號或者用逗號結尾的顯示返回變數的值。 2、百分號: 以百分號%開頭到行尾表示註釋,不多說了。 3、引

介面讀取資料用讀取換行引號特殊字元的問題

需求 :用 curl 匯出的資料多個jason之間自動換行,雙引號不轉義。 修改之前: curl 出來的資料 類似於“{\"name\":\"李四\"}\r\n"{\"name\":\"張三\"}" 需求樣式“{"name":"李四"}     &nbs

jsp中顯示包含html標籤特殊字元的處理方式

如果需要對這些包含html標籤的特殊字元進行原樣輸出,目前發現有以下兩種方法: 1.${fn:escapeXml("<p>包含特殊字元,但escapeXml=false</p>")} 2.<c:out value="<p>包含特殊字

使用URLDecoder.decode解析字串含有"+","+"這個特殊字元會被吃掉,轉換成空格

實際使用情況是這樣的: 我們在使用url的時候,一般從網路或是伺服器得到的一個url地址一般都是經過encode編碼過的(一般是使用URLEncoder.encode),或者是我們要給服務端傳遞url引數,直接使用的話,到服務端去解析的時候(應該服務端就是使用decode來

cookie值中包含等號、空格、分號特殊字元的處理

當cookie中包含有等號、空格、分號等特殊字元時,可能會導致資料丟失、或者不能解析的錯誤,一個較好的解決辦法就是:在將cookie值寫入客戶端瀏覽器之前,首先進行URLEncode編碼,讀取cookie時,進行URLDecode即可。 php 提供了2種設定cookie的方法,setcookie與

@PathVariable 中包含.特殊字元異常

spring MVC從3.0開始支援REST,而主要就是通過@PathVariable來處理請求引數和路徑的對映。 由於考慮到SEO的緣故,很多人喜歡把新聞的名稱作為路徑中的一部分去處理,這時候中文的名稱就會遇到問題,沒辦法對映,這個是因為編碼問題,只要到 T

後臺向前臺傳反斜槓、單引號特殊字元問題

後臺action中向前臺返回的值包含反斜槓、單引號等特殊字元,在前臺用el表示式或者java程式碼取值報錯,如: 後臺:request.setAttribute("name","\\"); 前臺取值:'${name}'或‘<%=request.getParameter

DataTable資料中帶有雙引號特殊字元,進行轉義

public static string DataTable2Json(DataTable dt)    {        System.Text.StringBuilder jsonBuilder = new System.Text.StringBuilder();   

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

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

js:使用JSON.stringify的時候,對\n特殊字元的處理

這個問題困擾了我好半天,很費勁才知道怎麼解決的,原來辦法很簡單,跟大家分享一下 解決辦法: 把文字框裡填寫的\n,在獲取的時候轉換成回車 例如: var activityJson = {}; activityJson['des'] =  $('#Id').textbox

資料庫欄位內容存在'、"、>、<特殊字元,轉義html字元輸出

GuestBook_Content=&lt;span style=&#39;font: 14px/24px arial, 宋體, sans-serif, tahoma, &quot;Microsoft YaHei&quot;; color:

######mybatis頁面get請求傳參亂碼,controller接收到亂碼(特殊字元,不是問號那種)

====post請求,web.xml Spring編碼過濾器解決了。 ===但是get請求。還是不行。 ===######=查到修改tomcat的server.xml。但是說的不清楚。 ######【我修改的本地tomcat沒用。只用修改eclipse裡server中的se