| 函數 | 用途 | 編碼範圍 | 空格處理 | 典型場景 |
|---|---|---|---|---|
| urlencode | URL 參數值編碼 | 非字母數字、-_. 以外全編碼 | 轉為 + | 構建查詢字符串 |
| rawurlencode | URL 參數值編碼 (RFC 3986) | 同上 | 轉為 %20 | 現代 API、OAuth 簽名 |
| urldecode | urlencode 解碼 | - | + 轉空格 | 解析 $_GET/$_POST |
| rawurldecode | rawurlencode 解碼 | - | %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);
}
http_build_query()**:自動處理編碼、數組展開、數字索引。$url = 'api.php?' . http_build_query(['kw' => '中文', 'page' => 2]);parse_str()** 或直接信任 $_GET/$_REQUEST(PHP 已自動解碼)。