>  기사  >  백엔드 개발  >  PHP xls에서 내보낸 문자가 깨지는 문제를 해결하는 방법

PHP xls에서 내보낸 문자가 깨지는 문제를 해결하는 방법

PHPz
PHPz원래의
2023-04-26 10:29:292171검색

PHP를 개발하다 보면 엑셀의 내보내기 기능을 사용해야 하는 경우가 종종 있습니다. 그러나 내보낼 때 일반적인 문제, 즉 내보낸 Excel 파일이 깨져서 나타나는 문제가 발생할 수 있습니다. 이러한 상황에 대응하여 이 글에서는 php xls에서 내보낸 문자가 깨져 나오는 문제를 해결하는 방법을 소개하겠습니다.

1. 원인 분석

PHP Excel을 내보낼 때 문자가 깨지는 주요 이유는 다음과 같습니다.

1. 인코딩 문제: 내보낸 Excel 파일이 프로그램에 사용된 인코딩과 일치하지 않아 문자가 깨집니다. 2. 특수 문자 문제: 내보낸 데이터에 중국어, 영어 등과 같은 특수 문자가 포함되어 있어 문자가 깨질 수 있습니다.
3. 부적절한 사용: 내보내기 프로세스 중에 Excel 파일을 잘못 처리하면 문자가 깨질 수도 있습니다. 문자.

2. 솔루션

1. 통합 인코딩

PHP를 사용하여 Excel을 내보낼 때 내보낸 Excel 파일의 인코딩이 프로그램에서 사용된 인코딩과 일치하는지 확인해야 합니다. iconv 또는 mb_convert_encoding 함수를 사용하여 문자열 인코딩을 변환하면 데이터가 서로 다른 인코딩 간에 올바르게 변환되고 문자가 왜곡되는 것을 방지할 수 있습니다. 예를 들어, 데이터베이스에서 데이터 세트를 가져오는 경우 이를 UTF-8 인코딩으로 변환하고 내보내기 프로세스 중에 출력 인코딩을 UTF-8로 지정해야 합니다.

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 htmlentities 함수를 사용하세요

. Excel 파일을 내보낼 때 데이터에 ">, <, 공백 등과 같은 html 특수 문자가 포함된 경우 htmlentities 함수를 사용하여 이러한 특수 문자 앞에 이스케이프 문자를 추가할 수 있습니다. 코드 예제는 다음과 같습니다.

$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');3 출력 형식 지정 <p></p> PHP로 Excel을 내보낼 때 출력 형식을 지정하여 왜곡된 문제를 해결할 수도 있습니다. 예를 들어 PHPExcel로 Excel 파일을 내보낼 때 파일 형식을 UTF로 설정할 수 있습니다. -8 ($pdf->setUTF8(true) 메소드를 통해 지정) 인코딩 문제로 인해 문자가 깨지는 것을 방지합니다. 샘플 코드는 다음과 같습니다. <p></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. 결론

php xls를 내보낼 때 문자가 깨집니다. 매우 일반적인 문제입니다. 일반적인 상황에서는 데이터와 프로그램에서 사용되는 인코딩을 일관되게 사용하여 특수 문자를 이스케이프 처리하거나 특정 작업에서 다양한 데이터 세트에 대해 출력 형식을 지정할 수 있습니다. 프로그램 환경에서는 문서의 품질과 가용성을 보장하기 위해 왜곡된 문제를 해결하기 위한 해당 방법을 선택해야 합니다.

위 내용은 PHP xls에서 내보낸 문자가 깨지는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.