【问题标题】:setting utf8 with mysql through php通过 php 用 mysql 设置 utf8
【发布时间】:2009-03-08 21:15:01
【问题描述】:

我有以下非常简单的代码,它检索 utf8 formatetd 数据,例如包含来自 mysql 数据库的变音符号,可能设置为也可能不设置为 utf8。如果我使用任何一种注释掉的方法来确保返回 utf8 数据,则数据不会以 utf8 形式返回,但是如果我不使用它们,则会显示数据。为什么强制 utf8 会否定将数据显示为 utf8?

<?php
  $con = mysqli_connect("localhost", "x", "", "x");
  //$con->query("SET NAMES 'utf8'");
  //$con-set_charset('utf8');
  $recordsQuery = "SELECT ARTICLE_NAME FROM AUCTIONS1";

  if ($getRecords = $con->prepare($recordsQuery)) {
        $getRecords->execute();
        $getRecords->bind_result($ARTICLE_NAME);

        while ($getRecords->fetch()) {
        echo "<p>$ARTICLE_NAME";
             }
    } else {
        print_r($con->error);
    }

【问题讨论】:

  • 如果它没有以 UTF-8 格式返回,请展示它是如何返回的示例(包括十六进制解码,如果可能)!
  • 并检查您的表是否实际配置为使用 UTF-8 排序规则
  • 后者将无关紧要..“SET NAMES”的重点正是MySql将在适当时进行转换。
  • 在这种情况下,我的表没有设置为使用 UTF-8 排序规则,所以我虽然 SET NAMES 会确保它是 utf8。但是,启用 SET NAMES 后,它不会显示为 utf8。如何显示显示内容的差异?

标签: php mysql character-encoding


【解决方案1】:

也许错误在于您为页面提供服务的字符集。如果您从数据库中获取 UTF-8 内容并使用 Windows-1252 的默认 HTML 字符集提供它,那么它看起来会出现乱码。确保你有这个等价物:

header( 'Content-Type: text/html; charset=utf-8' );

在您的 PHP 代码中。

【讨论】:

  • 这不在我提供的测试代码中,而是在我的 ajax 应用程序中设置的。结果页面肯定是utf8,但如果我设置名称utf8,数据显示乱码。
【解决方案2】:
  1. 确保您的数据已在数据库中采用 UTF-8 编码
  2. 配置数据库以提供 UTF-8(例如 SET NAMES 'utf8')
  3. 在您的网站上使用正确的编码(点头)

如果仍有问题,请提供更多数据,尤其是预期和最终交付

【讨论】:

  • 使用什么编码来存储数据库中的字符串并不重要,因为大多数编码(包括默认的 iso-8859-1)都可以表示 u-umlaut。 MySql 支持字符集,因此如果连接设置为 utf-8,它将转换为 utf-8。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多