『葉狂人』的怕失憶筆記 Back-End

rawurlencode 與 urlencode差異

編碼後都一樣的符號:

` ! @ # $(錢號) % ^ & * ( ) _ - + = < > , . / ? | \ ' " : ;{ } [ ] 數字 英文 中文

不同的:

~

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 編碼

『葉狂人』的怕失憶筆記, author
所有聲音中最悅耳的就是讚美。The sweetest of allsounds is praise.
古希臘歷史學家 賽諾芬 Xenophon