fputcsv 将 HTML 代码插入 csv 文件

Posted

技术标签:

【中文标题】fputcsv 将 HTML 代码插入 csv 文件【英文标题】:fputcsv Inserting HTML code into a csv file 【发布时间】:2012-08-13 06:31:45 【问题描述】:

我在使用 fputcsv 写入 csv 文件时遇到问题。它将页面 html 也放入 csv 文件中。我的代码有什么问题?

//Excel header
header("Content-Disposition: attachment; filename=\"Delivery_Reports.csv\";" );
header("Content-type: application/vnd.ms-excel");
$out = fopen("php://output", 'w');
$flag = false;
// $result = mysql_query("SELECT * FROM senderids ") or die('Query failed!');
//$sel="SELECT number as MobileNumber ,snum as Sender , msg as Subject ,crdate as Date ,status FROM savemsg WHERE userID='".$_SESSION['id']."' ".$str." ORDER BY sn DESC ";
$result = mysql_query("SELECT `count`, `dnd`, `credit`, `sender_id`, `to`, `message`, `status` FROM `reports` WHERE `unq_id` = '$dlr_id'");
while(false !== ($row = mysql_fetch_assoc($result)))
    if(!$flag)
        $list = array(
            "Total"=>"Total",
            "DND"=>"DND",
            "Credits"=>"Credits",
            "From"=>"From",
            "To"=>"To",
            "Message"=>"Message",
            "Status"=>"Status"
        );
        // display field/column names as first row
        fputcsv($out, array_keys($list), ',', '"');
        $flag = true;
    
    // array_walk($row, 'cleanData');
    fputcsv($out, array_values($row), ',', '"');

fclose($out);

【问题讨论】:

...什么页面html?我什么都看不到。也许为您的问题添加更多背景信息? 那么,您看到的 HTML 是什么? 想必这不是你的php页面的全部内容吧?那里还有什么?在您创建 CSV 内容之前,此代码之前的任何 HTML 都将已经在页面输出缓冲区中...虽然您使用的是 php://output,但在这种情况下或多或少等同于使用 print...跨度> 【参考方案1】:

您不能保证在一段 sn-p 代码中不会输出任何其他内容。如果此 sn-p 之前的代码使用输出缓冲,您可以使用 ob_end_clean 丢弃 HTML。如果此 sn-p 之后的代码导致问题,您可以简单地调用 die 以使其完全停止运行。但是,如果此 sn-p 之前的代码直接将 HTML 输出到浏览器,或者它输出 HTML 之后的代码必须运行,那么您必须修改该代码才能解决您的问题。

正如 Tim 提到的,print、echo 和输出到 pseudo-file php://output 做完全相同的事情。

【讨论】:

【参考方案2】:

您也可以在关闭文件之前使用关键字continue (fclose($f);)。这也很有效。

【讨论】:

【参考方案3】:

您还可以在fclose($out); 之后使用exit;,这会阻止输出抓取我的html。

【讨论】:

这与使用die 相同。 @Brilliand 是的,它们是相同的,只是略有不同,die 关闭连接,exit 没有;拼写;起源;和退出值。 ***.com/questions/1795025/… 但这里没有提到exit 的其他答案。因此,如果有新人出现,他们会看到,“啊!,还有一个退出选项”。为论坛查看者提供选择。【参考方案4】:

我知道这是一个老问题,但在 Google 中可以找到,所以添加这个。

如果在您尝试创建文件之前由 CMS(如 WordPress 等)输出 HTML,则在输出标题之前添加 ob_clean();ob_start(); 可能会有所帮助。

例如:

function create_csv($records, $columns)
    ob_clean();
    ob_start();
    header('Content-Type: application/csv');
    header('Content-Disposition: attachment; filename="Export.csv"');
    $fp = fopen('php://output', 'w+');
    // Generate the file content.
    fclose($fp);
    die();

【讨论】:

以上是关于fputcsv 将 HTML 代码插入 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

PHP fputcsv 编码

使用 fputcsv 将 BOM 添加到 CSV 文件

使用fputcsv导出到csv时是否可以使标题文本变为粗体?

使用 fputcsv 从多维数组创建 CSV

在 PHP 中将 CSV 写入不带附件的文件

PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数