将查询结果导出到Excel CSV时总是显示HTML代码

我从SQL Server导出查询的结果。 我做了一半成功因为我有1个问题。 页面的HTML代码或界面包含在导出的.csv文件中。 如何从导出的文件中删除它? 我有下面的代码给你一个想法:)


此外,如果您有其他提示,我该如何改进这个东西,就像我希望它是Excel格式(xlsx),请指导我:)

在这里输入图像说明

<html> <head> <title>Generate Report</title> <script> function MessageBox() { alert('Clicked!'); } </script> </head> <body> <form method='post'> <input type='date' name='dateStart'> <input type='date' name='dateEnd'> <input type='submit' name='btnSubmit' onclick='MessageBox()'> <br> </form> </body> </html>"; <?php include "db.php"; $con = SetConn(); if(isset($_POST['btnSubmit'])) { header("Content-type: text/csv; charset=UTF-8"); header('Content-Disposition: attachment; filename=Export.csv'); $start = $_POST['dateStart']; $end = $_POST['dateEnd']; $user_query = sqlsrv_query($con, "SELECT TOP 100 * FROM [db_nps].[dbo].[survey_report] WHERE (time_stamp >= '$start' and time_stamp <= '$end')"); //While loop to fetch the records $contents = "it_id, it_site, it_oraclenumber, it_lastname, it_firstname, ttsd_number\n"; while($row = sqlsrv_fetch_array($user_query, SQLSRV_FETCH_ASSOC)) { $contents.=$row['it_id'].","; $contents.=$row['it_site'].","; $contents.=$row['it_oraclenumber'].","; $contents.=$row['it_lastname'].","; $contents.=$row['it_firstname'].","; $contents.=$row['ttsd_number']."\n"; } $contents_final = chr(255).chr(254).mb_convert_encoding($contents, "UTF-16LE","UTF-8"); print $contents_final; } ?> 

您正在告诉PHP将所有内容作为CSV文件的内容使用。 是的,在你回应你的HTML之后,你是这样做的,但是没关系; 它全部在同一时间处理。


让我解释:

当您使用header()方法时,您告诉浏览器它正在接收的内容是某种types的。 在你的情况下,你告诉它,它要接收的内容是一个CSV文件,它应该下载。

只要在printreadFile语句之前, header()放在文件中的哪个位置并不重要

所以基本上你的浏览器正在做的是读取整个页面, 包括HTML文件的纯文本。 请记住,虽然PHP将按顺序处理自己,但浏览器会同时接收来自服务器的所有信息,并且由于您要求将文档以CSV格式下载,因此需要整个页面。


所以你会怎么做?

我对你的build议是将打印代码放在一个单独的外部PHP文档中,并链接到它,而不是试图在一个回声的HTML页面上。