PHP: 不可读的输出字符
PHP: unreadable output characters
我正在使用 PHP 处理一个页面,但是当我检索它时存储在我的数据库中的数据(文本)显示不可读的字符,正如您从我的在线实例中看到的那样。
http://www.taleemulislam-radio.com/test.php
我的那个页面的 PHP 代码是:
<?php
require_once "pdo.php";
try {
$sql = "SELECT * FROM `content` ORDER BY `updated` DESC LIMIT 1";
$result = $pdo->query($sql);
$result = $result->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
die("Error: ".$e->getMessage());
}
header("Content-Type: text/html; charset=utf-8");
?>
<!DOCTYPE html>
<html lang="ps">
<head>
<meta charset="utf-8">
<title>تعليم الاسلام راډيو</title>
</head>
<body>
<?=var_dump($result)?>
</body>
</html>
元标记应该是
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
设置 PDO dsn 的字符集属性。
将您的列声明为 CHARACTER SET utf8
。提供 SHOW CREATE TABLE content;
进行验证。
让我们检查一下存储的内容。请做SELECT col, HEX(col) ...;
看看你是不是得到了大部分D8xx和D9xx,比如:
D8AAD8B9D984D98AD98520D8A7D984
如果你的"unreadable characters"是
تعليم الاسلام راډيو
那么经典案例就是
- 您在客户端中的字节已正确编码为 utf8.apostrophe。)
- 您连接的是
SET NAMES latin1
(或 set_charset('latin1')
或...),可能是默认连接。 (应该是utf8
。)
- table 中的列已声明
CHARACTER SET latin1
。 (或者可能是继承自 table/database。)(应该是 utf8
。)
数据 的修复是“两步更改”。
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
其中的长度足够大,而其他“...”的其他内容(NOT NULL
,等等)已经在列中了。
我正在使用 PHP 处理一个页面,但是当我检索它时存储在我的数据库中的数据(文本)显示不可读的字符,正如您从我的在线实例中看到的那样。
http://www.taleemulislam-radio.com/test.php
我的那个页面的 PHP 代码是:
<?php
require_once "pdo.php";
try {
$sql = "SELECT * FROM `content` ORDER BY `updated` DESC LIMIT 1";
$result = $pdo->query($sql);
$result = $result->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
die("Error: ".$e->getMessage());
}
header("Content-Type: text/html; charset=utf-8");
?>
<!DOCTYPE html>
<html lang="ps">
<head>
<meta charset="utf-8">
<title>تعليم الاسلام راډيو</title>
</head>
<body>
<?=var_dump($result)?>
</body>
</html>
元标记应该是
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
设置 PDO dsn 的字符集属性。
将您的列声明为 CHARACTER SET utf8
。提供 SHOW CREATE TABLE content;
进行验证。
让我们检查一下存储的内容。请做SELECT col, HEX(col) ...;
看看你是不是得到了大部分D8xx和D9xx,比如:
D8AAD8B9D984D98AD98520D8A7D984
如果你的"unreadable characters"是
تعليم الاسلام راډيو
那么经典案例就是
- 您在客户端中的字节已正确编码为 utf8.apostrophe。)
- 您连接的是
SET NAMES latin1
(或set_charset('latin1')
或...),可能是默认连接。 (应该是utf8
。) - table 中的列已声明
CHARACTER SET latin1
。 (或者可能是继承自 table/database。)(应该是utf8
。)
数据 的修复是“两步更改”。
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
其中的长度足够大,而其他“...”的其他内容(NOT NULL
,等等)已经在列中了。