экспорт выходных данных php в формате excel
include_once 'mysqlconn.php';
include_once "functions.php";
$filename = $_GET['par'].".xls";
header("Content-type: application/x-msexcel");
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
if ($_GET['i'] == "par1") {
func1();
} else if ($_GET['i'] == "par2") {
echo "şşşıııİİİ";
func2();
} else if ($_GET['i'] == "par3") {
echo "şşşıııİİİ";
func3();
}
Это мой export2excel.php файл и функции 1, 2,3 находятся в functions.php файл и вывод таблицы все работают хорошо, за исключением кодировки символов странным образом. Я использую кодировку utf-8 для всех своих файлов. 2-е еще, если приведенное выше утверждение выдает здоровый кодированный вывод, но остальные 2 кодируют мой вывод странными символами, такими как "Bãœtã‡E İćİ". это "BÜTÇE IÇI" по-турецки.
Короче говоря. те же файлы, та же кодировка, та же база данных, но разные результаты.
Любой идея?
3 answers
Excel использует UTF-16LE + Спецификация в качестве кодировки Юникода по умолчанию.
Таким образом, вам нужно преобразовать выходные данные в UTF-16LE и добавить перед ними спецификацию UTF-16LE "\xFF\xFE"
.
Некоторая дополнительная информация:
- Microsoft Excel искажает диакритические знаки в файлах .csv?
- Экспорт данных в CSV и Excel в ваших приложениях Rails
Вместо этого я бы использовал одну из существующих библиотек
- Расширение PHP Excel Расширение PECL с помощью Илья Альшанецкий (Основной разработчик PHP и Мастер выпуска)
- Электронная таблица_excel_writer Пакет PEAR
- PHPExcel
Изменить:
Некоторый код, который может помочь, если вы действительно не хотите использовать существующую библиотеку
<?php
$output = <<<EOT
<table>
<tr>
<td>Foo</td>
<td>IñtërnâtiônàlizætiøöäÄn</td>
</tr>
<tr>
<td>Bar</td>
<td>Перевод русского текста в транслит</td>
</tr>
</table>
EOT;
// Convert to UTF-16LE
$output = mb_convert_encoding($output, 'UTF-16LE', 'UTF-8');
// Prepend BOM
$output = "\xFF\xFE" . $output;
header('Pragma: public');
header("Content-type: application/x-msexcel");
header('Content-Disposition: attachment; filename="utf8_bom.xls"');
echo $output;
Если кто-то пытается использовать excel_writer в moodle и у него возникают проблемы с кодировкой вывода - скажем, если вы разрабатываете отчет, в котором в качестве данных в поле указан URL-адрес, - то в этом случае, чтобы просто устранить эту проблему, я заключил данные в кавычки, чтобы они, по крайней мере, открылись в excel, вот мой пример:
// Moodles using the PEAR excel_writer export
$table->setup();
$ex=new table_excel_export_format($table);
$ex->start_document( {string} );
$ex->start_table( {string} );
// heading on the spreadsheet
$title = array('Report Title'=>'Report 1');
$ex->add_data($title);
// end heading
$ex->output_headers( array_keys($table->columns) );
**foreach($data as $row){
$string="'".trim($row->resname,"'")."'";
$row->resname=$string;
$ex->add_data( $table->get_row_from_keyed($row) );
}**
$ex->finish_table();
$ex->finish_document();
Excel использует кодировку UTF-16LE в качестве кодировки по умолчанию. Поэтому вам следует либо самостоятельно конвертировать UTF-8 в UTF-16LE, либо использовать одну из проверенных и проверенных библиотек PHP Excel вместо того, чтобы пытаться изобретать велосипед. Я бы рекомендовал использовать PHPExcel...