<script>
document.write(escape("哈哈") + "<br>"); // %u54C8%u54C8
document.write(unescape("%u54C8%u54C8") + "<br>"); // 哈哈
document.write(encodeURIComponent("哈哈") + "<br>"); // %E5%93%88%E5%93%88
document.write(decodeURIComponent("%E5%93%88%E5%93%88") + "<br>"); // 哈哈
</script>
escape/unescape:已棄用,產生 %uXXXX 格式,非標準 URL 編碼。encodeURIComponent/decodeURIComponent:標準 RFC 3986,產生 UTF-8 百分號編碼,推薦使用。<?php
header('Content-Type: text/html; charset=utf-8');
$encoded = "%E5%93%88%E5%93%88"; // 瀏覽器送來的 UTF-8 編碼
echo urldecode($encoded) . "<br>"; // 哈哈 (推薦)
echo rawurldecode($encoded) . "<br>"; // 哈哈 (RFC 3986 標準,空格不轉 +)
echo utf8_decode($encoded) . "<br>"; // 亂碼 (utf8_decode 將 UTF-8 轉 ISO-8859-1,不適用)
echo $encoded . "<br>";
// 實際接收 $_GET 參數
echo $_GET['act'] . "<br>";
echo urlencode($_GET['act']) . "<br>";
?>
encodeURIComponent() 傳送參數。$_GET 或 $_REQUEST,PHP 已自動以 UTF-8 解碼(前提是頁面與資料庫皆為 UTF-8)。header('Content-Type: text/html; charset=utf-8')、資料庫連線 SET NAMES utf8mb4、檔案儲存為 UTF-8 無 BOM。urldecode() 重複解碼、utf8_decode()、iconv() 不必要轉碼。亂碼根源多為編碼不一致。前端 encodeURIComponent + 後端 UTF-8 環境 + 統一字元集,即可徹底解決中文參數傳遞問題。