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

PHP 解決 URL 中文參數亂碼:urlencode 與 iconv 兩大法寶

     編輯:PHP 綜合知識

問題根源

URL 標準僅允許 ASCII 字符,中文必須經過百分號編碼(%E4%B8%AD%E6%96%87)。若前後端編碼不一致(如頁面 GBK、接口 UTF-8),直接傳遞中文會導致亂碼或 400 錯誤。

方案一:標準 URL 編碼(推薦)

<?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,跨語言、跨平台通用,無編碼歧義。

方案二:iconv 編碼轉換(舊系統兼容)

<?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 時的過渡方案。

最佳實踐

  1. 全站統一 UTF-8:HTML ``、資料庫 `utf8mb4`、PHP `default_charset = "UTF-8"`。
  2. 所有輸出 URL 參數必經 urlencode(),接收端用 urldecode()(或框架自動解析)。
  3. 避免在 URL 中直接拼接原始中文,即使瀏覽器顯示正常,底層實際已自動編碼,行為不可控。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved