編碼後都一樣的符號:
`
!
@
#
$(錢號)
%
^
&
*
(
)
_
-
+
=
<
>
,
.
/
?
|
\
'
"
:
;
{
}
[
]
數字
英文
中文
不同的:
~
urlencode('~') : %7E rawurlencode('~') : ~
(空格)
urlencode(' ') : + rawurlencode(' ') : %20
rawurlencode 採用 » RFC 3986.
urlencode 則是 application/x-www-form-urlencoded RFC 1738
二個函式所依循的標準不同
如果要配合 JavaScript 的 encodeURIComponent 使用,則 rawurlencode 相容性會比較高
其實最混亂的就是 + 與 %20 的問題,在 JavaScript 中所提供的 encodeURI() 並不是遵循 application/x-www-form-urlencoded 編碼規範,如果要在 JavaScript 環境下自行實作 application/x-www-form-urlencoded 編碼就必須先使用 encodeURIComponent() 轉換,然後再另外將 %20 取代為 + 即可,如此就達到跟 PHP urlencode() 一樣的效果。
此外,我們在 Web 開發的過程中輸出 HTML 連結,雖然大多數瀏覽器都會很友善的自動對網址進行轉換再送出 HTTP Request 連線,但未了避免例外情況,我們還是遵循 RFC 3986 來處理 URL 比較正確,相容性也比較高。
參考資料來源:
淺談 HTTP URL 規範 – 善用 JavaScript encodeURIComponent() 與 PHP rawurlencode() 來進行 URL 編碼