Проблема с кодированием при чтении значений из файла utf-8 в PHP и помещении их в базу данных. - PullRequest
1 голос
/ 06 августа 2011

Я читаю файл в кодировке UTF-8 с использованием PHP и разбрасываю содержимое непосредственно в базе данных.Проблема в том, что когда я сталкиваюсь с таким символом, как », он помещает в базу данных следующее«

Как я могу правильно закодировать это, я читаю файл 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);
}

Ответы [ 2 ]

1 голос
/ 06 августа 2011

используйте

mysql_query("SET NAMES utf8");

сразу после подключения к БД и убедитесь, что кодировка браузера также поддерживается в utf-8

 header("Content-Type: text/html; charset: utf-8");
0 голосов
/ 06 августа 2011

Вы должны установить кодировку соединения с этим запросом

SET NAMES 'utf8'

перед сохранением любых данных.

Помните также, что некоторые графические интерфейсы базы данных или веб-интерфейс (например, phpMyAdmin) показывают неправильную кодировку, даже если ваши данные закодированы правильно. Это происходит, например, с SequelPro на Mac и с phpMyAdmin в некоторых средах.

Вы должны доверять своему браузеру, т.е. показывать вставленный контент на странице, которая имеет

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

и посмотрите, правильно ли отображаются данные. Или еще лучше доверить mysql командную строку, используя оболочку:

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