URL 標準僅允許 ASCII 字符,中文必須經過百分號編碼(%E4%B8%AD%E6%96%87)。若前後端編碼不一致(如頁面 GBK、接口 UTF-8),直接傳遞中文會導致亂碼或 400 錯誤。
<?php
// 發送端
$param = '關鍵詞';
$url = 'https://api.example.com/search?q=' . urlencode($param);
// 輸出: https://api.example.com/search?q=%E9%97%9C%E9%8D%B5%E8%A9%9E
// 接收端
$q = urldecode($_GET['q']); // 自動還原為 UTF-8 字符串
優點:符合 RFC 3986,跨語言、跨平台通用,無編碼歧義。
<?php
// 假設接收端為 GBK 內碼
$received = $_GET['q']; // 瀏覽器按頁面編碼發送,可能為 GBK
$utf8 = iconv('GBK', 'UTF-8//IGNORE', $received); // 轉為 UTF-8 處理
// 反向:UTF-8 輸出給 GBK 頁面
$gbk = iconv('UTF-8', 'GBK//IGNORE', $utf8);
場景:老系統頁面為 GBK/GB2312,無法全站遷移 UTF-8 時的過渡方案。
urlencode(),接收端用 urldecode()(或框架自動解析)。