【问题标题】:Encoding issue when reading values from a utf-8 file in PHP and putting them into a database.`从 PHP 中的 utf-8 文件读取值并将其放入数据库时​​出现编码问题。`
【发布时间】:2011-10-21 06:51:40
【问题描述】:

我正在使用 PHP 读取一个 UTF-8 编码的文件,并将内容直接发送到数据库中。问题是当我遇到诸如 ” 之类的字符时,它会将以下 †放入数据库中。

如何正确编码,我正在读取一个 UTF-8 文件,而我的数据库列的排序规则是 UTF-8。我究竟做错了什么?我缺少一个不错的功能吗?欢迎任何帮助。

这是我的桌子:

CREATE TABLE tblProductData (
  intProductDataId int(10) unsigned NOT NULL AUTO_INCREMENT,
  strProductName varchar(50) NOT NULL,
  strProductDesc varchar(255) NOT NULL,
  strProductCode varchar(10) NOT NULL,
  dtmAdded datetime DEFAULT NULL,
  dtmDiscontinued datetime DEFAULT NULL,
  stmTimestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (intProductDataId),
  UNIQUE KEY (strProductCode)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;

编辑:

我正在读这样的日期:

$hFile = @fopen($FileName, "r") or exit("\nUnable to open file: " . $FileName);
if($hFile)
{
    while(!feof($hFile))
    {
        $Line = fgets($hFile);
        $this->Products[] = new Product($Line);
    }
    fclose($hFile);
}

【问题讨论】:

标签: php database file encoding utf-8


【解决方案1】:

使用

mysql_query("SET NAMES utf8");

在连接到 DB 之后,确保浏览器编码也是 utf-8

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

【讨论】:

    【解决方案2】:

    您应该使用此查询设置连接编码

    SET NAMES 'utf8'
    

    在存储任何数据之前。

    请记住,即使您的数据编码正确,某些数据库 gui 或 web gui(即 phpMyAdmin)也会显示错误的编码。例如,Mac 上的 SequelPro 和某些环境中的 phpMyAdmin 都会发生这种情况。

    您应该信任您的浏览器,即在具有

    的页面中显示您插入的内容
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    

    header 并查看数据是否正确显示。或者使用 shell 更好地信任 mysql 命令行:

    echo 'SELECT yourdata FROM your table' | mysql -uuser -pyourpwd db_name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2012-02-11
      相关资源
      最近更新 更多