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

PHP 中文 URL 編碼與解碼函數深度解析

     編輯:PHP 相關知識

四大核心函數對比

函數用途編碼範圍空格處理典型場景
urlencodeURL 參數值編碼非字母數字、-_. 以外全編碼轉為 +構建查詢字符串
rawurlencodeURL 參數值編碼 (RFC 3986)同上轉為 %20現代 API、OAuth 簽名
urldecodeurlencode 解碼-+ 轉空格解析 $_GET/$_POST
rawurldecoderawurlencode 解碼-%20 轉空格手動解碼原始 URL

中文編碼實戰演示

<?php
$str = '?a=中文';

// urlencode
$e1 = urlencode($str);   // %3Fa%3D%D6%D0%CE%C4 (GBK 環境下)
// rawurlencode
$e2 = rawurlencode($str); // %3Fa%3D%D6%D0%CE%C4

// 雙重編碼(AJAX 兼容 GBK 頁面)
$double = rawurlencode($e1); // %253Fa%253D%25D6%25D0%25CE%25C4

// 解碼
echo urldecode($e1); // ?a=中文 (需頁面編碼匹配)
echo rawurldecode($e2); // ?a=中文
?>

關鍵陷阱:解碼後編碼不匹配

urldecode() 和 rawurldecode() 返回的字符串編碼**與原始 URL 編碼一致**。若原 URL 為 UTF-8 編碼(現代瀏覽器默認),解碼結果為 UTF-8 字節串。若當前頁面為 GBK,直接輸出會亂碼,**必須轉碼**:

$decoded = urldecode($urlParam);
if (getPageEncoding() === 'GBK') {
    $decoded = iconv('UTF-8', 'GBK//IGNORE', $decoded);
}

最佳實踐建議

  1. **全站統一 UTF-8**:HTML、PHP、數據庫、JS 文件、URL 參數全鏈路 UTF-8,徹底消除轉碼痛點。
  2. **構建 URL 使用 http_build_query()**:自動處理編碼、數組展開、數字索引。
    $url = 'api.php?' . http_build_query(['kw' => '中文', 'page' => 2]);
  3. **解析 URL 使用 parse_str()** 或直接信任 $_GET/$_REQUEST(PHP 已自動解碼)。
  4. **避免手動雙重編碼/解碼**;若歷史項目必須兼容,封裝統一工具類集中管理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved