2013-07-13 6 views
-1

Я использую код ядра php для экспорта данных в excel. Ниже мой код:
PHP Экспорт данных UTF-8 в Excel из Mysql

header('Content-Type: text/html; charset=utf-8'); 
mysql_connect("localhost","root",""); 
mysql_select_db("test"); 
//---------------------------------------- 
mysql_query("SET NAMES 'utf8'"); 
mysql_query("SET CHARACTER SET utf8"); 
mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'"); 
//---------------------------------------- 
$filename = "excelwork.xls"; 
$exists = file_exists('excelwork.xls'); 
if($exists) 
{ 
    unlink($filename); 
} 
$filename = "excelwork.xls"; 
$fp = fopen($filename, "wb"); 
$sql = "select * from test"; 
$result = mysql_query($sql); 
$$insert = ""; 
$insert_rows = ""; 
for ($i = 1; $i < mysql_num_fields($result); $i++) 
{ 
    $insert_rows .= mysql_field_name($result,$i) . "\t"; 
} 
$insert_rows.="\n"; 
fwrite($fp, $insert_rows); 
while($row = mysql_fetch_row($result)) 
{ 
    $insert = $row[1]. "\t" .$row[2]. "\t".$row[3]. "\t".$row[4]. "\t".$row[5]; 
    $insert .= "\n";    //  serialize($assoc) 
    fwrite($fp, $insert); 
} 
if (!is_resource($fp)) 
{ 
     echo "cannot open excel file"; 
} 
echo "success full export"; 
fclose($fp); 

============ Это мой Mysql Таблица ================

CREATE TABLE IF NOT EXISTS `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `status` int(11) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

-- 
-- Dumping data for table `test` 
-- 

INSERT INTO `test` (`id`, `name`, `status`) VALUES 
(1, 'सजल', 1), 
(2, 'सूर्या', 1), 
(3, 'धनश्री', 1), 
(4, 'मनीष', 1), 
(5, 'राहुल', 1); 

выход первенствовать архив дает этот вывод:

सजल 
सूरà¥à¤¯à¤¾ 
धनशà¥à¤°à¥€ 
मनीष 
राहà¥à¤² 

Но при экспорте с помощью PhpMyAdmin в XLS выход правильно:

सजल 
सूर्या 
धनश्री 
मनीष 
राहुल 

Пожалуйста, сообщите мне, что не так в моем коде. Я пробовал много вещей, искал много сообщений.
Благодаря

+0

да его набор в utf8 --- 'name' VARCHAR (255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, – Sajal

+0

Что вы видите, когда вы открываете файл CSV в текстовый редактор? Сравните это с csv, который экспортируется phpmyadmin. –

+0

@ Marcin Krawiec- оба файла: xls не csv. когда я открываю оба файла в текстовом поле, я вижу à¤¸à ¥, ठ° à ¥ या вид персонажей. – Sajal

ответ

2

Этот вопрос, кажется, задал несколько раз в день на данный момент

  1. встроенный fputcsv Используйте функцию РНР()
  2. Написать UTF-8 BOM заголовок файла CSV, прежде чем вы пишете какие-либо другие данные
  3. Рассмотрите возможность использования MySQL's own export

    SELECT *
    INTO OUTFILE «/ путь/к/file.csv ' ПОЛЯ, ЗАКЛЮЧЕННЫЕ', 'ОПЦИОНАЛЬНО ЗАКЛЮЧЕНЫ' '' ' ЛИНИИ, ПРЕРЫВАННЫЕ' \ n ' FROM test;

EDIT

$fh = fopen('test2.csv', 'w+'); 
fwrite($fh, "\xEF\xBB\xBF");  // Write UTF-8 BOM 
fwrite($fh, "sep=\t" . PHP_EOL); // Hint for MS Excel 
while($row = mysql_fetch_row($result)) { 
    fputcsv($fh, $row, "\t"); 
} 
fclose($fh); 
+0

@ Mark - Файл mysql outfile не работал. Он показывает à¤§à¤¨à¤¶à ¥ ठ° à ¥ € , а не символы UTF-8. Я пытаюсь fputcsv(). Не могли бы вы помочь с заголовком спецификации UTF-8. Я искал ее и раньше, но не знаю, как ее использовать. Благодарю. – Sajal

Смежные вопросы