今天做数据导出的时候出现了以下问题,导出没有问题,只是在数据的末尾莫名其妙的多出了三行代码:
</div> </body> </html>
花了一中午的时间终于找到了原因所在:在插件中导出数据需要注意由于在插件选项卡下,默认输出了 cpheader() 所以在输出之前需要 ob_end_clean(); 来清空之前的输出缓存,避免文件中带入了 html 头,同时由于 cpheader() 中将 cpfooter() 注册成为了结束函数,会自动在文件输出的末尾加上</div></body></html>为了避免出现这三行代码,需要在插件脚本中增加
define('FOOTERDISABLED',1);这样 cpfooter() 就不会输出结尾数据了。
既然说到这里了,就多说一些解决问题中总结的一些知识吧:
在很多时候我们需要导出 excle 文件来作为数据的统计,但是由于导出 excle 文件需要外部类文件的支持,所以 CSV 文件就成为了我们最好的选择。
一般情况下导出 CSV 文件的流程为:在 CSV 文件中两个单元格之内的东西用半角逗号隔开(,),程序中输出 \n 为换行。所以对于输出的文本,每行文本需要做一些过滤,将每行中
的 \n \r\n \r 都替换掉,不然会造成版式混乱。另外,要注意输出的文本需要为 GBK 编码,不然会造成导出的文件有乱码。
解决问题的过程中从网上看到这样的问题:
问题一:我从discuz的数据表里调出帖子的数据,将它显示在一个新的页面,由于数据里存在html标签,显示的效果达不到要求,没有将html标签转换。如何转换html标签,求懂discuz的高手解决,谢谢了!
有人回答:如果要过滤,请用 strip_tags($content); 如果要替换某些内容,请用 preg_replace(),可能在某些情况下这种解决方法管用,但是在dz中我试了,但是没有实现我想要的效果,如果你遇到类似的问题,不妨一试,所不定能会起作用
问题二:写了一个php导出csv文档的方法,但是发现到处的csv文档中出现了html源码,想问一下如何去除html源码。
有人回答:
1、输出html的时候 exit只能过滤后面的html标签,但是却不能消除文档一开始就写入的html标签,现在主要的问题就是如何过滤调用导出csv方法之前的html标签。
2、输出html的时候 exit就好
3、结尾die掉
这三种回答或许在其他的地方可以使用,但是在dz中好像没有效果,所以不能说它是错的。
另外还有就是我导出数据到csv的时候,如果是纯数据,比如12345678912(数据够大吧),导入到csv时会以科学计算法的方式显示在文件中,经过N久的尝试,有从网上找了N多的方法,终于功夫不负有心人,找到了一种比较好的解决办法,描述如下:
如果出现我刚才说的这种情况,可以在数据的前面或者后面加上"\t",记得要用双引号引起来哦,不然有可能不起作用的,至于为什么用双引号引起来,我也不知道为什么,还请自己研究……