【问题标题】:Why am I getting HTML in my MySQL export to CSV?为什么我的 MySQL 导出到 CSV 时会出现 HTML?
【发布时间】:2008-10-16 00:31:02
【问题描述】:

我知道以前有人问过这个问题,但我遇到了问题。

奇怪的是,当我执行这个函数时,它包含了你选择执行该函数的链接的页面的html。

function exportCSV($table) {
    $result = mysql_query("SHOW COLUMNS FROM ".$table."");
    $i = 0;
    if (mysql_num_rows($result) > 0) {
        while ($row = mysql_fetch_assoc($result)) {
            $csv_output .= $row['Field']."; ";
            $i++;
        }
    }
    $csv_output .= "\n";

    $values = mysql_query("SELECT * FROM ".$table."");
    while ($rowr = mysql_fetch_row($values)) {
        for ($j=0;$j<$i;$j++) {
            $csv_output .= $rowr[$j]."; ";
        }
        $csv_output .= "\n";
    }

    $filename = $file."_".date("Y-m-d_H-i",time());
    header("Content-type: application/vnd.ms-excel");
    header("Content-disposition: csv" . date("Y-m-d") . ".csv");
    header( "Content-disposition: filename=".$filename.".csv");
    print $csv_output;
    exit;
}

有人知道为什么它会在 csv 文件中包含 HTML 吗? alt text http://i35.tinypic.com/16i9oxi.jpg

【问题讨论】:

  • 你能发布一些代码来说明 exportCSV() 是如何被调用的吗?
  • 我使用 switch 语句,当调用 case "export" 时,它执行导出功能。案例“出口”; exportCSV('志愿者');休息;
  • 生成页眉页脚的代码中是否有case语句?

标签: php mysql csv


【解决方案1】:

我的猜测是,无论请求的页面如何,您都有某种模板可以生成相同的 HTML 页眉和页脚。在调用 exportCSV 函数之前的某个时间,会生成标头。

你没有显示输出的底部,但我敢打赌页脚也在那里,因为我怀疑在函数退出后流控制将继续到该代码。

【讨论】:

  • 这是一个包含导航的页面。我将如何解决这个问题?我应该将导出功能打开到一个新的空白页面吗?
  • 在生成页眉和页脚的代码中,如果您正在生成 CSV 文件,请绕过该代码。为了获得进一步的帮助,您需要包含更多代码。顺便说一句,对您的内容标题设置表示赞赏......这是大多数人搞砸的部分!
【解决方案2】:

php 真的不是我的事,但似乎您需要在写出内容之前清除响应流。在达到此功能之前,也许还有其他东西正在将 html 写入流?像模板或母版页或类似的东西?

HTML 内容看起来像一个典型的标题/导航栏。是否有其他内容会自动包含您需要为此路线禁用的内容?

【讨论】:

    【解决方案3】:

    您在某处遇到了控制流问题 - 似乎 html 头部和导航默认包含在任何页面中,包括生成 CSV 的页面。 一种解决方案是检查 CSV 请求,如果是这种情况,请不要包含 html 代码,另一种解决方案是使用输出缓冲,然后在输出 CSV 数据之前丢弃所有先前的输出。

    【讨论】:

    • 我有一个功能只是打印出索引页面上的导航。索引页面基本上是一个 switch 语句,根据您单击的链接执行相应的功能。
    【解决方案4】:

    我建议在方法开始时将 csv_output 变量初始化为空字符串。您在方法中的所有操作都是串联的,因此您可能会带来一些旧数据。

    【讨论】:

    • 将其设置为 $csv_output = '';没用,不过还是谢谢你。
    【解决方案5】:

    请注意,您正在向全世界展示潜在的敏感数据。现在有十几个人的电子邮件地址和街道地址已被公开。

    【讨论】:

    • 哇……我看着这张图片,甚至从未想过……当你专注于其他事情时,你会变得多么盲目。
    • 即使文字模糊,您也可以区分它。每个字母都会产生独特的模糊图案,并且由于字母字符数量有限,因此很容易找出每个字母的模糊图案并获得原始文本。虽然获取一些电子邮件地址可能需要做很多工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多