DW 內建 PHP/MySQL 行為生成的頁面,讀取數據庫中文顯示為亂碼(如「????」或「涓婁竴娆℃垜」)。
MySQL 連接建立後,默認字符集為 latin1,而表/數據實為 utf8 或 gbk,導致服務端按 latin1 發送、客戶端按 utf8/gbk 解碼,產生映射錯位。
<?php
// 連接代碼由 DW 自動生成
$conn = mysql_connect('localhost', 'user', 'pass') or die(mysql_error());
mysql_select_db('dbname', $conn);
// ===== 關鍵一行 =====
// 數據庫/表/字段為 UTF-8
mysql_query("SET NAMES 'utf8'", $conn);
// 或為 GBK
// mysql_query("SET NAMES 'gbk'", $conn);
?>
SET NAMES 'charset' 等價於執行三條語句:
SET character_set_client = charset; SET character_set_results = charset; SET character_set_connection = charset;
統一了「客戶端發送」、「服務端返回」、「連接層轉換」三端字符集,徹底消除亂碼。
<?php
// PDO
$pdo = new PDO("mysql:host=localhost;dbname=db;charset=utf8mb4", 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mysqli
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->set_charset('utf8mb4'); // 推薦 utf8mb4 兼容 Emoji
?>
mysql_* 擴展,新項目請直接改寫為 PDO/mysqli。utf8mb4,連接層同步設置,全鏈路無轉碼。