PHP/MySQL 的字符编码问题
Character encoding issue with PHP/MySQL
我有一个在我的计算机上本地开发的 Web 应用程序,我最近在我的 Web 服务器上启动了它,其设置与 MySQL 完全相同,但由于某种原因,我遇到了字符编码“弯引号”(') 显示为带有问号 (�) 的黑色三角形的问题,但仅在服务器上显示。
这是在 HTML:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
我的本地 MySQL 数据库(没有字符问题)是 MySQL 5.7.26,带有 InnoDB table,UTF8MB4
编码和 table 归类共 utf8mb4-unicode-ci
我的服务器 MySQL 数据库(有字符问题)是 MySQL 5.5.5-10.3.21,InnoDB table 编码 UTF8MB4
和 table utf8mb4-unicode-ci
的排序规则
也许我遗漏了某个 PHP 设置?
编辑:
如果我 运行 我的计算机上的这个脚本运行良好,但是如果我 运行 我的服务器上的相同脚本和数据库中的相同数据,它会给我字符编码问题:
error_reporting(E_ALL);
include 'dbconfig.php';
$id = 19;
try {
$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$sql = $pdo->prepare("SELECT * FROM products WHERE id=:id");
$sql->execute(['id' => $id]);
var_dump ($sql->fetch());
while ($row = $sql->fetch()) {
$data[] = $row;
}
echo json_encode($data);
} catch(PDOException $e) {
//echo "Error: " . $e->getMessage();
echo "Database Error";
}
$conn = null;
(因为这明显显示了 PDO 遗漏,所以我重新打开)
One-line 变化:
$pdo = new
PDO("mysql:host=$servername;dbname=$dbname;dbname=db;charset=utf8mb4'",
$username, $password);
参考文献:
http://mysql.rjweb.org/doc.php/charcoll#php
(特别注意“黑钻石”)
我有一个在我的计算机上本地开发的 Web 应用程序,我最近在我的 Web 服务器上启动了它,其设置与 MySQL 完全相同,但由于某种原因,我遇到了字符编码“弯引号”(') 显示为带有问号 (�) 的黑色三角形的问题,但仅在服务器上显示。
这是在 HTML:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
我的本地 MySQL 数据库(没有字符问题)是 MySQL 5.7.26,带有 InnoDB table,UTF8MB4
编码和 table 归类共 utf8mb4-unicode-ci
我的服务器 MySQL 数据库(有字符问题)是 MySQL 5.5.5-10.3.21,InnoDB table 编码 UTF8MB4
和 table utf8mb4-unicode-ci
也许我遗漏了某个 PHP 设置?
编辑:
如果我 运行 我的计算机上的这个脚本运行良好,但是如果我 运行 我的服务器上的相同脚本和数据库中的相同数据,它会给我字符编码问题:
error_reporting(E_ALL);
include 'dbconfig.php';
$id = 19;
try {
$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$sql = $pdo->prepare("SELECT * FROM products WHERE id=:id");
$sql->execute(['id' => $id]);
var_dump ($sql->fetch());
while ($row = $sql->fetch()) {
$data[] = $row;
}
echo json_encode($data);
} catch(PDOException $e) {
//echo "Error: " . $e->getMessage();
echo "Database Error";
}
$conn = null;
(因为这明显显示了 PDO 遗漏,所以我重新打开)
One-line 变化:
$pdo = new
PDO("mysql:host=$servername;dbname=$dbname;dbname=db;charset=utf8mb4'",
$username, $password);
参考文献:
http://mysql.rjweb.org/doc.php/charcoll#php