0

过去几个小时我努力尝试但未能找到解决方案。为什么会这样……我有一张 collat​​ion=utf8_general_ci 的表,它的列/字段排序规则也设置为 utf8_general_ci。我可以从 phpmyadmin 正确查看泰国数据。但是当我获取此表数据并使用 php 代码显示时,它显示 ???????

点击查看页面。

在这个页面中,我直接写了一个泰语单词,当我从数据库中获取并显示它时,它显示正确但相同的单词/文本显示???

我在用

<meta http-equiv="Content-Type" content="text/html; charset=tis-620"> 

目前和当我尝试过

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我发现 Direct 和数据库中的文本/单词都显示为 ?????

4

2 回答 2

1

您的 MySQL 连接本身可能未使用 utf8。来自 MySQL 手册:

SET NAMES indicates what character set the client will use to send SQL statements 
to the server. Thus, SET NAMES 'cp1251' tells the server, “future incoming 
messages from this client are in character set cp1251.” It also specifies the 
character set that the server should use for sending results back to the client. 
(For example, it indicates what character set to use for column values if you use 
a SELECT statement.)

根据您连接到数据库的方式(mysql_connect/mysqli_connect 或 PDO),步骤会有所不同。如果使用mysql_connect();ormysqli_connect;那么您将需要运行mysql_query("SET NAMES utf8");. 理论上,如果使用 PHP PDO,您可以使用相同的步骤,但您也可以在 PDO 对象构造期间设置 init 命令。这是我的一个数据库交互类的示例。

$dsn = 'mysql:host='.$database_detail['dbhost'].';dbname='.$database_detail['dbname'];
$this->dbh = new PDO($dsn, $database_detail['dbuser'],
    $database_detail['dbpass'], array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => FALSE,
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
));
于 2014-03-05T15:51:09.583 回答
0

我有时会遇到西班牙语的这个问题,即使我在 html 中设置了内容类型,它仍然显示错误的编码类型。

对我有用的是,如果我以正确的格式“保存 php 文档”然后解决问题。

您会看到您的文档何时与 Apache 分离,或者无论您使用什么,它都会发送它读取的文档类型,但是您的 PHP 代码正在动态地从数据库中获取内容。

所以我会做以下事情:

在 HTML 中编写泰语单词并使其正确显示。尝试通过以不同的编码选项保存文档来执行此操作。这通常是保存对话框中的选项,一旦显示它,然后尝试从数据库中获取它。

当然,您可以强制 Apache 以您想要的编码提供文档,但这假设您可以访问这些设置。

我希望这会有所帮助。

于 2014-03-05T15:45:56.523 回答