ホームページ >バックエンド開発 >PHPチュートリアル >phpexcelのコードが文字化けする
前にやったプロジェクトがutf8でエンコードされていてエクセルへのエクスポートは正常でした
今のプロジェクトもutf8なので前のコードをコピーしました
出力時に文字化けがありました
原因がわかりません
すべてのファイルのエンコードは
はすべて gbk に変更されています。 Excel のデフォルトのエンコードは gbk ですよね。
それ以外の場合は、gbk に変換してください
以前に utf-8 に問題はありましたか?
http://blog.csdn.net/ohmygirl/article/details/6907946
これは私が以前書いた phpExcel の文字化けコードをまとめたものです。ぜひご覧ください。
BOM ヘッダーに関連しているかどうかを確認する必要があります
モデレータの上司は常に BOM について言及し、オンラインでコードをコピーしました
if (isset($_GET['dir'])){ //设置文件目录 $basedir=$_GET['dir']; }else{ $basedir = '.'; } $auto = 1; checkdir($basedir); function checkdir($basedir){ if ($dh = opendir($basedir)) { while (($file = readdir($dh)) !== false) { if ($file != '.' && $file != '..'){ if (!is_dir($basedir."/".$file)) { echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>"; }else{ $dirname = $basedir."/".$file; checkdir($dirname); } } } closedir($dh); } } function checkBOM ($filename) { global $auto; $contents = file_get_contents($filename); $charset[1] = substr($contents, 0, 1); $charset[2] = substr($contents, 1, 1); $charset[3] = substr($contents, 2, 1); if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) { if ($auto == 1) { $rest = substr($contents, 3); rewrite ($filename, $rest); return ("<font color=red>BOM found, automatically removed.</font>"); } else { return ("<font color=red>BOM found.</font>"); } } else return ("BOM Not Found."); } function rewrite ($filename, $data) { $filenum = fopen($filename, "w"); flock($filenum, LOCK_EX); fwrite($filenum, $data); fclose($filenum); }
すべて英語と数字だと文字化けしますか?
コードを投稿して見てください。
公式のサンプルコードを使用しています
間違いはありません
// Create new PHPExcel object$objPHPExcel = new PHPExcel();// Set properties$objPHPExcel->getProperties()->setCreator("Maarten Balliauw") ->setLastModifiedBy("Maarten Balliauw") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file");// Add some data$objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'Hello') ->setCellValue('B2', 'world!') ->setCellValue('C1', 'Hello') ->setCellValue('D2', 'world!');// Miscellaneous glyphs, UTF-8$objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A4', 'here') ->setCellValue('A5', 'that');// Rename sheet$objPHPExcel->getActiveSheet()->setTitle('Simple');// Set active sheet index to the first sheet, so Excel opens this as the first sheet$objPHPExcel->setActiveSheetIndex(0);// Redirect output to a client’s web browser (Excel5)header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename="01simple.xls"');header('Cache-Control: max-age=0');$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');$objWriter->save('php://output');
ちなみに、私は thinkphp フレームワークを使用していますが、これとは何の関係もないはずです
まずは Buzhu の返信を読みましたか?ファイルには bom ヘッダーがあります。
header('Content-Type: application/vnd.ms-excel');
この文にエンコードを追加します
header('Content-Type: application/vnd.ms-excel;charset=utf-8') ;
まず、ファイルに BOM ヘッダーがあるかどうかを確認してください。
header('Content-Type: application/vnd.ms-excel');
この文にエンコードを追加します
header('Content-Type: application/vnd.ms-excel;charset=utf-8') ;
前の文はありますが、次の文を追加しても機能しません
あなたのコードでテストしましたが、文字化けしたコードはありません。
ファイル形式を確認してください。 BOM 形式なしで utf-8 として保存します。
私のプロジェクトに何か問題がありますか?
私のプロジェクトに何か問題がありますか?
コードには問題がないので、次の 2 つの理由が考えられます:
1. ファイルに BOM ヘッダーがあるため、Excel が出力される前に他の内容が出力され、混乱が生じます。
2. phpExcelのバージョンに問題があります。最新のものは1.7.6ですよね?
または、コードにこれら以外のコードが含まれており、それらのコードが出力されたり、エラーが発生したりする可能性があります。 。
UTF8 を GB2312 にエンコードしてみてください
コードに問題はないので、次の 2 つの理由が考えられます:
1. ファイルに BOM ヘッダーがあるため、Excel が出力される前に他のコンテンツが出力され、混乱が生じます。 。
2. phpExcelのバージョンに問題があります。最新のものは1.7.6ですよね?
または、コードにこれら以外のコードが含まれており、それらのコードが出力されたり、エラーが発生したりする可能性があります。 。
問題は、ファイルを引用する TP の rbac 内の書き換えられた文に問題があることが判明しました。これで、メソッド内で参照されるようになります。ありがとうございます
上記の方法でも文字化けが発生する場合は、出力バッファーに他の冗長なコンテンツがある可能性があります。php ファイルに Excel コンテンツを設定する前に、出力バッファーをクリーンアップしてください。 php ob_clean();? >
私も文字化けの問題に遭遇しましたが、空のExcelファイルを新規作成しても文字化けしていましたが、20階の方法でバッファをクリアすることでやっと解決しました! ! !
elcel がブラウザに出力される場合、以前に出力情報が存在する可能性もあります。そうでない場合は、形式が正しくない場合にエラーが発生します