記錄乙個有些奇怪的問題,關於引數「+」號在傳輸過程中是否被轉義。
使用get方式,php收到的引數中「+」會變為空格,看說明應該是執行了urldecode,如果需要恢復為「+」號,需要對接收到的引數進行urlencode。
通過使用curl和瀏覽器方式,接收到的引數均把+號轉為了空格。
請求位址為http://ip/xx?aa=+889
使用$_request['aa']
接收到的引數值為「 889」
,引數+號被轉為了空格,如果希望得到原樣的+889
,則需要使用urlencode($_request)
來進行獲取。
但是,如果傳輸的時候,使用的是http://ip/xx?aa=%2b889
,即自行對+號進行了url編碼,那$_request
接收到的就是+889
的引數。
使用post方式,curl執行接收到的引數也是將+號轉為了空格;但是通過html form模擬的post,接收到的卻是完整的+號(form提交的時候自動對引數進行了url編碼?)。
接收引數使用$_post。
如果在curl的時候,post的引數使用編碼後的%2b889
,那php接收到的就是+889
。
因此,得出乙個結論:
php在接收到引數的時候,會自動對引數進行一次urldecode解碼操作,因此,如果傳送的引數未進行url編碼,那特殊字元(例如+號)就會被解碼為空格,導致引數接收不正確。
如果希望php正確的接收到包含特殊字元的引數,那client與server之間就需要有乙個約定,例如client傳送的引數都是經過url編碼後的引數,這樣server接收到的引數就是正確的引數。
URL引數的加號等特殊字元的處理
之前沒有遇見過,這樣的問題,所以都沒有考慮過。有乙個引數裡面有乙個 號,接收的時候 不見了,如address 上海黃埔 上海浦東 接收的時候變成 上海黃埔上海浦東 了。string url aspx?xx xx name contextwai.server.urlencode name haha c...
php中的特殊字元轉義 php特殊字元轉義詳解
html array html username htmlentities clean username ent quotes,utf 8 echo welcome back,複製 小提示htmlspecialchars 函式與htmlentities 函式基本相同,它們的引數定義完全相同,只不過是...
ajax 中關於URL路徑及引數特殊字元問題
最近在做專案時,ajax引數中出現了特殊字元 導致路徑出現截斷問題,去度娘找了下答案,找到了解決辦法,在js中有個 escape 函式 看下函式介紹 escape 函式可對字串進行編碼,這樣就可以在所有的計算機上讀取該字串。例子輸出 visit 20w3school 21 3f 21 3d 28 2...