ホームページ >バックエンド開発 >PHPチュートリアル >phpexcelのコードが文字化けする

phpexcelのコードが文字化けする

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-23 14:13:501737ブラウズ

前にやったプロジェクトが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 がブラウザに出力される場合、以前に出力情報が存在する可能性もあります。そうでない場合は、形式が正しくない場合にエラーが発生します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。