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

2021-08-18 16:21:54 字數 920 閱讀 6931

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

使用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...