首頁  >  文章  >  後端開發  >  php接收+號等特殊字元參數的問題

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

不言
不言原創
2018-04-13 14:06:542971瀏覽

本篇文章介紹的內容是php接收號等特殊字元參數的問題,現在分享給大家,有需要的朋友可以看一下

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

1、get方式請求

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

但是,如果傳輸的時候,使用的是http://ip/xx?aa=+889,即自行對號進行了url編碼,那$_REQUEST 接收到的就是 889的參數。

2、post方式請求

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

3、結論

因此,得出一個結論:
php在接收到參數的時候,會自動對參數進行一次urldecode解碼操作,因此,如果傳送的參數未進行url編碼,那麼特殊字元(例如號)就會被解碼為空格,導致參數接收不正確。
如果希望php正確的接收到包含特殊字元的參數,那麼client與server之間就需要有一個約定,例如client傳送的參數都是經過url編碼後的參數,這樣server接收到的參數就是正確的參數。


以上是php接收+號等特殊字元參數的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn