首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP rawurlencode() 與 urlencode() 差異深度解析

     編輯:PHP 相關知識

rawurlencode() vs urlencode():核心差異與最佳實踐

在 PHP 開發中,rawurlencode() 與 urlencode() 皆用於 URL 編碼,但兩者處理空白字元的方式不同,導致實際應用時常產生不一致問題。本文深入解析兩者差異並提供選擇建議。

核心差異:空白字元編碼方式

函數遵循標準空白編碼適用場景
rawurlencode()RFC 3986 (取代 RFC 1738)%20URL 路徑、查詢參數值、API 請求
urlencode()application/x-www-form-urlencoded (表單提交標準)+POST 表單資料、傳統查詢字串

實際範例對比

$url = 'https://example.com/PHP 編碼區別+';

// rawurlencode 輸出
http%3A%2F%2Fexample.com%2FPHP%20%E7%B7%A8%E7%A2%BC%E5%8D%80%E5%88%A5%2B

// urlencode 輸出
http%3A%2F%2Fexample.com%2FPHP+E7%B7%A8%E7%A2%BC%E5%8D%80%E5%88%A5%2B

差異在於空白:rawurlencode 編為 %20,urlencode 編為 +。加號(+)本身會被 rawurlencode 編為 %2B,而 urlencode 保持為 +。

對應解碼函數

  • rawurldecode() — 解碼 rawurlencode() 編碼的字串
  • urldecode() — 解碼 urlencode() 編碼的字串(會將 + 還原為空白)

最佳實踐建議

  1. 統一使用 rawurlencode():符合現代 RFC 3986 標準,避免跨平台、跨語言整合時的編碼不一致。
  2. 表單 POST 資料:瀏覽器原生提交時自動使用 application/x-www-form-urlencoded,伺服端以 $_POST 接收已自動解碼,無需手動處理。
  3. JavaScript 對應:前端請使用 encodeURIComponent()(對應 rawurlencode),而非 escape() 或 encodeURI()。

常見陷阱

  • 混用兩種編碼導致簽名驗證失敗(如 OAuth、API 金鑰驗證)。
  • 雙重編碼:對已編碼字串再次編碼,造成 %2520 等異常。
  • 解碼函數不匹配:用 urldecode() 解碼 rawurlencode() 結果,空白無法正確還原。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved