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

PHP 表單 POST 亂碼終極解決:統一 UTF-8 編碼全攻略

     編輯:PHP 相關知識

核心原則:全鏈路 UTF-8

資料庫、資料表、欄位、PHP 檔案、HTML 頁面、MySQL 連線、HTTP Header —— 每一環都必須是 UTF-8,缺一不可。

檢查清單

層級設定項目正確值
資料庫建庫/建表/欄位 Collationutf8mb4_general_ci(支援 emoji)
PHP 連線PDO DSNmysql:host=localhost;dbname=test;charset=utf8mb4
PHP 連線mysqli$mysqli->set_charset('utf8mb4')
PHP 檔案編輯器儲存編碼UTF-8 without BOM
HTML 頁面<meta charset="UTF-8">放在 <head> 最前面
HTTP 回應Headerheader('Content-Type: text/html; charset=UTF-8')
表單<form accept-charset="UTF-8">強制瀏覽器以 UTF-8 送出

常見錯誤與修正

錯誤 1:資料庫 utf8_general_ci,PHP 設定 SET NAMES GB2312

// 錯誤
mysql_query("SET NAMES GB2312");
// 正確
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'user', 'pass');

錯誤 2:PHP 檔案以 ANSI/Big5 儲存

使用 VS Code、PhpStorm、Notepad++ 另存為 UTF-8 (without BOM)。

錯誤 3:HTML meta charset 寫錯或位置錯

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"> <!-- 必須在 title 之前 -->
    <title>...</title>
</head>

錯誤 4:Windows 環境下 BOM 干擾

UTF-8 with BOM 會導致 header() 失效、輸出異常。務必移除 BOM。

除錯技巧

  1. 在表單處理頁面最頂端加入:var_dump($_POST); 觀察原始資料。
  2. 瀏覽器開發者工具 Network → Payload 查看實際送出的編碼。
  3. 資料庫客戶端直接查看儲存的十六進位:SELECT HEX(column) FROM table;

結語

亂碼本質是編碼不一致。建立「全站 UTF-8」規範,並用檢查清單逐項驗證,即能徹底解決 POST 亂碼問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved