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

來源:互聯網
上載者:User

本篇文章介紹的內容是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接收到的參數就是正確的參數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.