【问题标题】:Characters not displaying correctly on a UTF-8 website字符无法在 UTF-8 网站上正确显示
【发布时间】:2013-04-12 03:04:53
【问题描述】:

我已尽我所能,但特殊字符无法在此网页上正确显示。

例如,在数据库中是:

但在网站上是:

Nouveaux R�alistes

这是我检查过的所有内容...

数据库设置为UTF-8:

页面是用 NetBeans 编写的,文档编码设置为 UTF-8:

页眉声明UTF-8:

元字符集设置为 UTF-8:

我什至在我的 .htacess 中添加了以下行:

但仍有字符显示不正确,我从 W3C Validator 收到以下错误:

我觉得我已经尝试了所有方法,但仍然无法正常工作。 (我什至在 PHP 中尝试过 htmlspecialcharshtmlentities,但页面甚至没有呈现!)


更新
根据要求,这是我正在使用的代码:

class Exhibition {
    public $exhibitionDetails;    

    public function __construct(Database $db, $exhibitionID){
        $this->_db = $db;

        $params['ExhibitionID'] = $exhibitionID;

        $STH = $this->_db->prepare("SELECT * 
            FROM Exhibition
            INNER JOIN Schedule
                ON Exhibition.ExhibitionID = Schedule.ExhibitionID            
            WHERE Schedule.Visible = 1
                AND Exhibition.ExhibitionID = :ExhibitionID;");

        $STH->execute($params);

        $this->exhibitionDetails = $STH->fetchAll(PDO::FETCH_ASSOC);

    }
}

还有……

try {
    $db = new Database(SITE_ROOT."/../");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $exhibition = new Exhibition($db,$_GET['id']);
} catch (PDOException $e) {
    echo "<p class='error'>ERROR: ".$e->getMessage()."</p>";
}

最后……

<p><?php echo $exhibition->exhibitionDetails[0]["Desc"]; ?></p>

【问题讨论】:

  • 我猜你编码太多了。你能展示你的 php 代码来获取记录并输出它吗?
  • 你用的是什么字体?我对pdf有类似的问题。 See here
  • 您的数据库中的数据好像不是UTF-8编码的。
  • @Gumbo 我已将数据粘贴到 NetBeans 中的 UTF-8 编码文档中。保存它,关闭它,重新打开它,然后检查文本。它看起来不错,所以我将它剪切并粘贴回数据库中......但仍然是相同的结果。你有什么建议吗?
  • 如何将数据插入数据库?

标签: php mysql html utf-8 html-entities


【解决方案1】:

如果您使用mysql_* 函数:

mysql_query("SET NAMES 'utf8'");

如果您使用的是PDO

$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'username';
$password = 'password';
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 

$dbh = new PDO($dsn, $username, $password, $options);

它设置连接编码。

【讨论】:

  • 我不太明白如何将其应用到我的代码中。不过,我希望你是对的!
  • Database 类中查找new PDO
  • 是的!就是这样!谢谢!
  • 这可能会导致问题,mysql_* 函数对直接 SET NAMES 没有反应,这就是为什么你必须通过 mysql_set_charset。没有理由不使用它,因为它更易于书写和阅读。
【解决方案2】:

我使用 PHP 已经有好几年了,但那时它本身并不支持 Unicode,快速搜索谷歌告诉我它仍然不支持。你仍然可以让它工作。

这是一个很棒的链接:

Encodings And Character Sets To Work With Text

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2020-05-15
    相关资源
    最近更新 更多