/** * 用于生成excel文件的函数 * author:walker * @param $data 生成excel的数据(二维数组形式) * @param null $savefile 生成excel的文件名(保不指定,则为当前时间戳) * @param null $title 生成excel的表头(一维数组形式) * @param string $sheetname 生成excel的sheet名称(缺省为sheet1) */ function exportExcel($data,$savefile=null,$title=null,$sheetname='sheet1'){ //若没有指定文件名则为当前时间戳 if(is_null($savefile)){ $savefile=time(); } //若指字了excel表头,则把表单追加到正文内容前面去 if(is_array($title)){ array_unshift($data,$title); } import('Org.Util.PHPExcel'); import('Org.Util.PHPExcel.IOFactory'); import('PHPExcel.Util.PHPExcel.Reader.Excel5'); $objPHPExcel = new \PHPExcel(); //Excel内容 foreach($data as $k => $v){ $obj=$objPHPExcel->setActiveSheetIndex(0); $row=$k+1;//行 $nn=0; foreach($v as $vv){ $col=chr(65+$nn);//列 $vv = iconv("UTF-8", "GB2312//IGNORE",$vv); $obj->setCellValue($col.$row,$vv);//列,行,值 $nn++; } } $objPHPExcel->getActiveSheet()->setTitle($sheetname); $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$savefile.'.xls"'); header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; } /** * * 导出Excel */ function expUser(){//导出Excel $xlstitle = array('id','商品编码','模板编号','商品名称','总库存','当前库存','供应商'); $xlssql = M('erp_inventory'); $xlsData = $xlssql->getField('id,p_code,mid,pname,banlance,cur_banlance,factory'); // show_bug($xlsData);die; $this->exportExcel($xlsData,time(),$xlstitle); }
上記は thinkphp フレームワークを使用したコードです。 2 番目の写真は、どこで問題が発生し、どのように解決するかです。
ディスカッションに返信(解決策)
29 行をコメントアウト $vv = iconv("UTF-8", "GB2312//IGNORE",$vv);
29 行をコメントアウト $vv = iconv( "UTF- 8", "GB2312//IGNORE",$vv);
最初に29行目はありませんでしたが、後から追加しました。追加しても追加しなくても、エクスポートされた効果は同じです。 !
thinkphp を使用しているので、utf-8 である必要があります
そして、PHPExcel のデフォルトの文字セットも utf-8 です
では、なぜ
$vv = iconv("UTF-8", "GB2312//IGNORE ", $vv);
utf-8 を gb2312 に変換しますか?
投稿行 52、$xlsData によって出力されるコードの一部は 2 次元配列ですが、ここでは問題ありません。お役に立てれば幸いです
$vv = iconv("UTF-8", "GB2312//IGNORE",$vv);
$vv = iconv("UTF-8", "UTF-8//IGNORE") " ,$vv);
$vv = iconv("GB2312", "UTF-8//IGNORE",$vv);
上記の 3 つをすべて試しましたが、結果は同じでした。 !
thinkphp を使用しているため、utf-8 である必要があります
そして、PHPExcel のデフォルトの文字セットも utf-8 です
では、なぜ次のようにする必要があります
$vv = iconv("UTF-8", "GB2312// IGNORE" ,$vv);
utf-8 を gb2312 に変換しますか?
理解できない?私はそれを明らかにしませんでしたか?ヒューリスティックな解決策は受け入れられないようです
トランスコードに iconv を使用するステートメントをすべて削除してください。
これは理解できるはずですよね?
PHPExcel を使用して Excel に書き込まれるデータは、UTF-8 でエンコードされたデータである必要があります
これは理解すべきですよね?
様子を見て gbk に変換してください。iconv を火星文字と繁体字中国語の文字に変換するときに問題が発生します
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");
理解できません?私はそれを明らかにしませんでしたか?ヒューリスティックな解決策は受け入れられないようです
トランスコードに iconv を使用するステートメントをすべて削除してください。
これは理解できるはずですよね?
PHPExcel を使用して Excel に書き込まれるデータは、UTF-8 でエンコードされたデータである必要があります
これは理解すべきですよね?
わかりました、29 行目と 38 行目は削除しても役に立ちません。どこを削除すればよいでしょうか?
gbk に変換して見てください。 iconv を火星文字と繁体字に変換するときに問題が発生します。
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");
$vv = 、 それはどういう意味ですか?
38 は削除する必要はありません
それでも機能しない場合は、スクリーンショットを投稿してください
gbk に変換して確認してください iconv を火星文字と繁体字中国語の文字に変換する際に問題が発生します
$vv = mb_convert_encoding ($vv =, "GBK"," UTF-8");
$vv =, どういう意味ですか?
タイプミス、$vv
見た目を gbk に変換してください。iconv を火星文字と繁体字中国語の文字に変換するときに問題が発生します
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");
$vv = 、どういう意味ですか?
タイプミス、$vv
は通過できません、
38は削除する必要はありません
それでも動作しない場合はスクリーンショットを投稿します
38行追加されましたWPSのせいでしょうか?会社ではWPS、自宅ではoffice2007を使用しているのですが、現在コードが文字化けしています。ブレーク方法
方法 1:
setlocale(LC_ALL, 'zh_CN');
方法 2:
$str = mb_convert_encoding($str, "UTF-8", "GBK"); // ソース コードは次のようになります。 be GBK、convert For utf-8
ブログをご覧ください。 csvファイルをインポートしましたが、原理は同じだと思います。
http://blog.csdn.net/phpfenghuo/article/details/17483261
方法 1:
setlocale(LC_ALL, 'zh_CN')
方法 2:
$str = mb_convert_encoding($str, "UTF-8 ", "GBK"); //既知のソースコードは GBK で、utf-8 に変換されています
ブログが見れます。 csvファイルをインポートしましたが、原理は同じだと思います。
方法 1: LC_ALL とは何ですか?
方法 2: エラーを報告する
これら 2 つの文はどこに配置されていますか? $vv の代わりに 28 行目に置くと機能しません。
不是很清楚 Untitled Spreadsheet、Unknown Creator 是如何来的
为什么是 $obj=$objPHPExcel->setActiveSheetIndex(0);
而不是 $obj = $objPHPExcel->getActiveSheet();
刚才单独测试了一下,你的首发代码应该是没有问题的,当然是没有 iconv 的
问题在于文档中出现的 Untitled Spreadsheet、Unknown Creator 是如何产生的
不是很清楚 Untitled Spreadsheet、Unknown Creator 是如何来的
为什么是 $obj=$objPHPExcel->setActiveSheetIndex(0);
而不是 $obj = $objPHPExcel->getActiveSheet();
按照你说的,变成这样了,Untitled Spreadsheet、Unknown Creator没有了
转为gbk看下,另iconv转火星文和繁体字会有问题
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");
$vv =, 什么意思?
笔误,$vv
过不了呢、
extension=php_mbstring.dll把这个扩展开了
转为gbk看下,另iconv转火星文和繁体字会有问题
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");
$vv =, 什么意思?
笔误,$vv
过不了呢、
extension=php_mbstring.dll把这个扩展开了
php 的extension=php_mbstring.dll 开启了,重启apache,导出没有报错,但还是乱码
你没注意还是有错误信息吗?
A4的Worksheet...Feuilles de calcul
原来的
$objPHPExcel->getActiveSheet()->setTitle($sheetname);
$objPHPExcel->setActiveSheetIndex(0);
并没有错!
不是很清楚 Untitled Spreadsheet、Unknown Creator 是如何来的
为什么是 $obj=$objPHPExcel->setActiveSheetIndex(0);
而不是 $obj = $objPHPExcel->getActiveSheet();
按照你说的,变成这样了,Untitled Spreadsheet、Unknown Creator没有了
刚看错了,应该是28行,还是乱码。
你没注意还是有错误信息吗?
A4的Worksheet...Feuilles de calcul
原来的
$objPHPExcel->getActiveSheet()->setTitle($sheetname);
$objPHPExcel->setActiveSheetIndex(0);
并没有错!
那代码又回来刚开始了,那个乱码的excel 我可以在excel设置里面改编码吗?
对,有转回去了
我前面说了,我单独测试你的代码段是没有问题的。
所以问题可能出在别的地方:比如传入的数据、从表中读取的数据、甚至是你使用的phpexcel类
include 'Plugin/PHPExcel/Classes/PHPExcel.php'; // import('Org.Util.PHPExcel.IOFactory'); // import('PHPExcel.Util.PHPExcel.Reader.Excel5'); $data = array( array('中','文','c'), array('a','b','c'), array('a','b','c'),); $sheetname = '123'; $savefile = time(); $objPHPExcel = new PHPExcel(); //Excel内容 foreach($data as $k => $v){ $obj=$objPHPExcel->setActiveSheetIndex(0); $row=$k+1;//行 $nn=0; foreach($v as $vv){ $col=chr(65+$nn);//列$vv = iconv('gbk', 'utf-8', $vv); $obj->setCellValue($col.$row,$vv);//列,行,值 $nn++; } } $objPHPExcel->getActiveSheet()->setTitle($sheetname); $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$savefile.'.xls"'); header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output');
对,有转回去了
我前面说了,我单独测试你的代码段是没有问题的。
所以问题可能出在别的地方:比如传入的数据、从表中读取的数据、甚至是你使用的phpexcel类
include 'Plugin/PHPExcel/Classes/PHPExcel.php'; // import('Org.Util.PHPExcel.IOFactory'); // import('PHPExcel.Util.PHPExcel.Reader.Excel5'); $data = array( array('中','文','c'), array('a','b','c'), array('a','b','c'),); $sheetname = '123'; $savefile = time(); $objPHPExcel = new PHPExcel(); //Excel内容 foreach($data as $k => $v){ $obj=$objPHPExcel->setActiveSheetIndex(0); $row=$k+1;//行 $nn=0; foreach($v as $vv){ $col=chr(65+$nn);//列 $vv = iconv('gbk', 'utf-8', $vv); $obj->setCellValue($col.$row,$vv);//列,行,值 $nn++; } } $objPHPExcel->getActiveSheet()->setTitle($sheetname); $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$savefile.'.xls"'); header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output');
源数据,和获取的都没问题,excel类是官网下的,我项目excel导入还用这个这个包啊,应该没问题的。
转为gbk看下,另iconv转火星文和繁体字会有问题
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");
$vv =, 什么意思?
笔误,$vv
过不了呢、
extension=php_mbstring.dll把这个扩展开了
php 的extension=php_mbstring.dll 开启了,重启apache,导出没有报错,但还是乱码
header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); 注释掉这句看看
对,有转回去了
我前面说了,我单独测试你的代码段是没有问题的。
所以问题可能出在别的地方:比如传入的数据、从表中读取的数据、甚至是你使用的phpexcel类
include 'Plugin/PHPExcel/Classes/PHPExcel.php'; // import('Org.Util.PHPExcel.IOFactory'); // import('PHPExcel.Util.PHPExcel.Reader.Excel5');$data = array( array('中','文','c'), array('a','b','c'), array('a','b','c'),); $sheetname = '123'; $savefile = time(); $objPHPExcel = new PHPExcel(); //Excel内容 foreach($data as $k => $v){ $obj=$objPHPExcel->setActiveSheetIndex(0); $row=$k+1;//行 $nn=0; foreach($v as $vv){ $col=chr(65+$nn);//列$vv = iconv('gbk', 'utf-8', $vv); $obj->setCellValue($col.$row,$vv);//列,行,值 $nn++; } } $objPHPExcel->getActiveSheet()->setTitle($sheetname); $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$savefile.'.xls"'); header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output');
我弄了一组测试数据,导出还是乱码啊?你不是测试没有问题吗?
好吧,我导出来了,exportexcel重写了,还是这个方法写的有问题,还是谢谢你们啊。
从图中可看到第5、11行都有错误信息
你可把标题去掉,只保留数据体,进行测试
exportExcel 中把这句也注释掉
$objPHPExcel->getActiveSheet()->setTitle($sheetname);
从图中可看到第5、11行都有错误信息
你可把标题去掉,只保留数据体,进行测试
exportExcel 中把这句也注释掉
$objPHPExcel->getActiveSheet()->setTitle($sheetname);
还是不行哦
function exportexcel($data=array(),$title=array(),$filename='report'){ header("Content-type:application/octet-stream"); header("Accept-Ranges:bytes"); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:attachment;filename=".$filename.".xls"); header("Pragma: no-cache"); header("Expires: 0"); //导出xls 开始 if (!empty($title)){ foreach ($title as $k => $v) { $title[$k]=iconv("UTF-8", "GB2312",$v); } $title= implode("\t", $title); echo "$title\n"; } if (!empty($data)){ foreach($data as $key=>$val){ foreach ($val as $ck => $cv) { $data[$key][$ck]=iconv("UTF-8", "GB2312", $cv); } $data[$key]=implode("\t", $data[$key]); } echo implode("\n",$data); } }
我用上面的方法导出来没问题,问题结果是每组数据都在每行excel表格A格中,没有按列排开。能不能帮我改改

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック









