本篇文章介紹的內容是php接收號等特殊字元參數的問題,現在分享給大家,有需要的朋友可以看一下
記錄一個有些奇怪的問題,關於參數「 」號在傳輸過程中是否被轉義。
使用get方式,php收到的參數中「 」會變成空格,看說明應該是執行了urldecode,如果需要恢復為「 」號,需要對接收到的參數進行urlencode。
透過使用curl和瀏覽器方式,接收到的參數均把 號轉為了空格。
請求位址為http://ip/xx?aa= 889
使用$_REQUEST['aa']
接收到的參數值為“ 889”
,參數號碼被轉為了空格,如果希望得到原樣的 889
,則需要使用urlencode($_REQUEST)
來進行取得。
但是,如果傳輸的時候,使用的是http://ip/xx?aa=+889
,即自行對號進行了url編碼,那$_REQUEST
接收到的就是 889
的參數。
使用post方式,curl執行接收到的參數也是將號轉為了空格;但是透過html form模擬的post,接收到的卻是完整的號(form提交的時候自動對參數進行了url編碼?)。
接收參數使用$_POST。
如果在curl的時候,post的參數使用編碼後的+889
,那麼php接收到的就是 889
。
因此,得出一個結論:
php在接收到參數的時候,會自動對參數進行一次urldecode解碼操作,因此,如果傳送的參數未進行url編碼,那麼特殊字元(例如號)就會被解碼為空格,導致參數接收不正確。
如果希望php正確的接收到包含特殊字元的參數,那麼client與server之間就需要有一個約定,例如client傳送的參數都是經過url編碼後的參數,這樣server接收到的參數就是正確的參數。
以上是php接收+號等特殊字元參數的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!