Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das Problem verstümmelter Zeichen, die von PHP XLS exportiert werden

So lösen Sie das Problem verstümmelter Zeichen, die von PHP XLS exportiert werden

PHPz
PHPzOriginal
2023-04-26 10:29:292138Durchsuche

Im Prozess der PHP-Entwicklung müssen wir häufig die Exportfunktion von Excel verwenden. Beim Exportieren kann jedoch ein häufiges Problem auftreten, nämlich dass die exportierte Excel-Datei verstümmelt erscheint. Als Reaktion auf diese Situation wird in diesem Artikel erläutert, wie das Problem verstümmelter Zeichen beim Export aus PHP XLS gelöst werden kann.

1. Ursachenanalyse

Beim Export von PHP-Excel sind die Hauptgründe für verstümmelte Zeichen:

1. Kodierungsproblem: Die exportierte Excel-Datei stimmt nicht mit der im Programm verwendeten Kodierung überein
2. Sonderzeichenproblem: Die exportierten Daten enthalten Sonderzeichen wie Chinesisch, Englisch usw., die ebenfalls zu verstümmelten Zeichen führen können.
3. Unsachgemäße Verwendung: Während des Exportvorgangs kann es auch zu verstümmelten Zeichen kommen Charaktere.

2. Lösung

1. Einheitliche Kodierung

Wenn Sie PHP zum Exportieren von Excel verwenden, müssen Sie sicherstellen, dass die Kodierung der exportierten Excel-Datei mit der im Programm verwendeten Kodierung übereinstimmt. Sie können die Funktion iconv oder mb_convert_encoding verwenden, um die Zeichenfolgenkodierung zu konvertieren, um sicherzustellen, dass die Daten korrekt zwischen verschiedenen Kodierungen konvertiert werden, und um verstümmelte Zeichen zu vermeiden. Wenn Sie beispielsweise den Datensatz aus der Datenbank entnehmen, müssen Sie ihn in die UTF-8-Kodierung konvertieren und während des Exportvorgangs die Ausgabekodierung als UTF-8 angeben:

header("Content-type:text/html;charset=utf-8");
$data = array(); // 数据集
// 从数据库中获取数据集
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$pdo = new PDO($dsn, 'root', '');
$stmt = $pdo->query('SELECT * FROM user');
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 将数据集转为UTF-8编码
foreach ($data as &$row) {
    foreach ($row as $key => &$value) {
        $value = mb_convert_encoding($value, 'UTF-8', 'auto');
    }
}
unset($row);
// 导出Excel文件
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setTitle('title'); // 指定Excel文件标题
$objPHPExcel->getActiveSheet()->fromArray($data); // 将数据集导入Excel表格
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel;charset=utf-8');
header('Content-Disposition: attachment;filename="example.xls"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');

2 Verwenden Sie die Funktion htmlentities

Wenn beim Exportieren der Excel-Datei die Daten HTML-Sonderzeichen wie „>, <, Leerzeichen usw.“ enthalten, können Sie mit der Funktion „htmlentities“ Escape-Zeichen vor diesen Sonderzeichen hinzufügen. Das Codebeispiel lautet wie folgt :

$data = array( 
    array("name", "gender", "age", "info"), 
    array("张三", 1, 18, "hello world"), 
    array("李四", 0, 20, "2021/06/23"), 
);
//遍历数据,将特殊字符进行转义
foreach($data as &$row){
    foreach($row as &$cell){
        $cell = htmlentities($cell, ENT_COMPAT, &#39;UTF-8&#39;);
    }
}
unset($cell);
unset($row);
//将数据写入到Excel文件中
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->fromArray($data, NULL, 'A1');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="example.xls"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');</p>
<p>3. Geben Sie das Ausgabeformat </p>
<p> an. Beim Exportieren von Excel mit PHP können Sie auch das Ausgabeformat angeben, um das verstümmelte Problem zu lösen. Wenn Sie beispielsweise eine Excel-Datei mit PHPExcel exportieren, können Sie das Dateiformat auf festlegen UTF-8 (angegeben durch die Methode $pdf->setUTF8(true)). Der Beispielcode lautet wie folgt: </p>
<pre class="brush:php;toolbar:false">$data = array( 
    array("name", "gender", "age"), 
    array("张三", 1, 18), 
    array("李四", 0, 20), 
);
//将数据写入到Excel文件中
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->fromArray($data, NULL, 'A1');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->setUseUTF8(true); // 设置文件格式为UTF-8
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="example.xls"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');

3. Fazit

Beim Exportieren von PHP-XLs werden verstümmelte Zeichen angezeigt Ein sehr häufiges Problem. Sie können sicherstellen, dass die von den Daten und dem Programm verwendete Codierung konsistent ist, indem Sie die Funktion htmlentities verwenden, um dieses Problem zu lösen Sets und Programmumgebungen, Sie müssen entsprechende Methoden auswählen, um das verstümmelte Problem zu lösen, um die Qualität und Verfügbarkeit der Dokumente beim endgültigen Export sicherzustellen

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem verstümmelter Zeichen, die von PHP XLS exportiert werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn