PHP结合vue导出excel出现乱码的解决方法分享

  • Post category:PHP

以下是“PHP结合vue导出excel出现乱码的解决方法分享”的完整使用攻略,包括问题原因、解决方法、示例代码等内容。

问题原因

在PHP结合Vue导出Excel时,可能会出现中文乱码的问题。这是因为Excel默认使用的编码方式与中文编码方式不同,导致中文字符无法正确显示。

解决方法

要解决中文乱码问题,您可以使用以下两种方法之一:

方法一:设置Excel编码方式

您可以在导出Excel时,设置Excel的编码方式为UTF-8。以下是一个示例,演示了如何在PHP中设置Excel的编码方式:

header('Content-Type: application/vnd.ms-excel; charset=UTF-8');
header('Content-Disposition: attachment;filename="example.xls"');
header('Cache-Control: max-age=0');

echo "\xEF\xBB\xBF"; // UTF-8 BOM

// 输出Excel内容

在上述示例中,我们使用header函数来设置Excel的编码方式为UTF-8。我们还使用echo函数输出UTF-8 BOM,以确保Excel正确解析UTF-8编码的内容。

方法二:使用第三方库

您可以使用第三方库来导出Excel,这些库通常支持中文编码,并且提供了更多的功能。以下是一个示例,演示了如何使用phpoffice/phpspreadsheet库来导出Excel:

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', '中文内容');

$writer = new Xlsx($spreadsheet);
$writer->save('example.xlsx');

在上述示例中,我们使用phpoffice/phpspreadsheet库来创建一个Excel实例,并向其添加中文内容。然后,我们使用Xlsx类将Excel保存到文件中。

示例代码

以下是一个完整的示例代码,演示了如何使用Vue和PHP结合导出Excel,并解决中文乱码问题:

<template>
  <div>
    <button @click="exportExcel">导出Excel</button>
  </div>
</template>

<script>
import axios from 'axios';
import XLSX from 'xlsx';

export default {
  methods: {
    exportExcel() {
      axios.get('/export').then(response => {
        const data = response.data;
        const workbook = XLSX.utils.book_new();
        const worksheet = XLSX.utils.json_to_sheet(data);
        XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
        const buffer = XLSX.write(workbook, { type: 'buffer' });
        const blob = new Blob([buffer], { type: 'application/vnd.ms-excel' });
        const link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = 'example.xlsx';
        link.click();
      });
    }
  }
}
</script>
use Illuminate\Http\Request;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

Route::get('/export', function () {
    $data = [
        ['姓名', '年龄'],
        ['张三', 20],
        ['李四', 25],
        ['王五', 30],
    ];

    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    $sheet->fromArray($data, null, 'A1');

    $writer = new Xlsx($spreadsheet);
    $writer->save('php://output');
})->name('export');

在上述示例中,我们使用Vue和Axios来发起HTTP请求,获取Excel数据。然后,我们使用xlsx库将数据转换为Excel格式,并使用Blob和URL.createObjectURL来下载Excel文件。在PHP端,我们使用phpoffice/phpspreadsheet库来创建Excel实例,并将数据写入Excel文件中。我们还使用header函数来设置Excel的编码方式为UTF-8。