close
最近遇到要使用PHP把參數加到URL中,遇到特殊字元要轉碼
一開始直覺使用urlencode(),結果它把空白轉成"+"號....
後來仔細一查發現要使用rawurlencode()才行
--
查了一下發現2011年有碰到類似問題
[轉] 混亂的 URLEncode
--
以下為轉文 https://blog.longwin.com.tw/2015/11/php-rawurlencode-urlencode-diff-2015/
PHP 的 urlencode() 官方說明
PHP 的 rawurlencode() 官方說明
上述說明還是很難懂,這邊做個比較簡單的說明:
RFC 3986 與 HTTP 定義的空白字元差異
- RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax
- 規範 「空白字元」→ %20
- ex: DVD player 會轉換成 DVD%20player
- HTTP 對 GET / POST 傳遞參數 (application/x-www-form-urlencoded) - RFC 1866 - Hypertext Markup Language - 2.0
- 規範 「空白字元」→ +
- ex: DVD player 會轉換成 DVD+player
結論
除了 PHP 的以外,也把其它程式語言一起列出來。
PHP
- urlencode 是走 HTTP (RFC 1866):空白字元用「+」
- rawurlencode 是走 RFC 3986:空白字元用「%20」
JavaScript
- encodeURI、encodeURIComponent:空白字元用「%20」,要做 application/x-www-form-urlencoded (AJAX POST)的話,要自己把 「%20」 換成 「+」
Python 2
- urllib.urlencode:空白字元用「+」
Python 3
- urllib.parse.urlencode:空白字元用「%20」
相關網頁
全站熱搜
留言列表