-1

我以为我了解 charset 是如何工作的,但显然还没有。

使用 eclipse 我创建了一个新的 PHP 项目。我添加了一个 index.php 文件(非常简单):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  <head>
<meta http-equiv="Content-Type" content="text/html charset=utf-8" />
  </head>
  <body>
    <?php
      try {
    $dbh = new PDO('mysql:host=localhost;dbname=symfony', 'root', '');
    foreach($dbh->query('SELECT * from product') as $row) {
    print_r($row['description'] ."</br/>");
    }
    $dbh = null;
      } catch (PDOException $e) {
    print "Erreur !: " . $e->getMessage() . "<br/>";
    die();
      }
   ?>
  </body>
</html>

“描述”字段是 utf8_general

我的数据库是 utf8_general

我可以在 phpMyAdmin 中读取我的数据库服务器字符 UTF-8 Unicode (utf8)

我在 Apache 配置文件中添加指令“AddDefaultCharset utf-8”

php 文件中的字符集是 utf-8

无论如何,强调的字母有问题。

为了正确显示它们,我可以:

  • 更改 Apache 默认字符集:AddDefaultCharset iso-8851-1

或者

  • 使用 utf8_encode PHP 函数

我的问题是:考虑到一切都是 UTF-8,我的字符串何时在执行过程中以 iso-8851-1 格式格式化?

4

2 回答 2

3

关于 UTF-8,Stack Overflow 用户从UTF-8 一直到. 在您的情况下,缺少的一点是您没有告诉 PDO 关于连接编码:

$dbh = new PDO('mysql:host=localhost;dbname=symfony', 'root', '');

... 应该:

$dbh = new PDO('mysql:host=localhost;dbname=symfony;charset=utf8', 'root', '');

请注意,在将参数添加到 DSN时,不鼓励在 PHP 5.3.6 或更高版本中设置此类编码的所有其他替代方法(即SET NAMES utf8手动运行或使用参数运行)。PDO::MYSQL_ATTR_INIT_COMMANDcharset

于 2013-10-22T15:10:16.643 回答
0

您还必须将连接设置为 UFT-8

$dbh->query('SET NAMES utf8 COLLATE utf8_general')
于 2013-10-22T14:54:13.177 回答