已下载.csv文件包含HTML标记作为文本
问题描述:
我想要下载 a .csv文件通过链接。为此,下载链接定义在模板文件中。已下载.csv文件包含HTML标记作为文本
要生成.csv文件我写了一段代码如下。
public function loadPartnerApplicantData() {
$inboundBo = BoFactory::getInboundHttpRequestBo();
$fileType = $inboundBo->getSanitizedGetParam('f');
$formId = $inboundBo->getSanitizedGetParam('fid');
ServiceFactory::getFormService()->loadFormDetails($formId);
$dbTable = BoFactory::getFormBo()->getFormDbTable($formId);
$formName = slugify(BoFactory::getFormBo()->getFormName());
$fileName = $formName . "." . time();
$fieldMasterSqlQuery = "SELECT field_name,field_label FROM" . FORM_FIELDS_MASTER_v2 . "where form_id='$formId' order by serial_no";
$fieldMasterSqlQueryStatus = mysql_query(mysql_fetch_assoc($fieldMasterSqlQuery));
$csvHeader = "";
$fieldNameArray = array();
foreach ($fieldMasterSqlQueryStatus as $key => $value) {
if ($value['field_name'] == 'declaration' || $value['field_name'] == 'docPicture') {
continue;
}
$csvHeader.= "\"{$value['field_label']}\";";
$fieldNameArray[] = $value['field_name'];
}
$queryString = implode(",", $fieldNameArray);
$dbTableSqlQuery = "SELECT $queryString FROM `$dbTable`";
$dbTableSqlQueryStaus = mysql_query(mysql_fetch_assoc($dbTableSqlQuery));
ef_clearBuffer();
// To generate csv
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$fileName.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo($csvHeader);
foreach ($dbTableSqlQueryStaus as $applicantData) {
echo "\n";
foreach ($fieldNameArray as $fieldName) {
echo "\"$applicantData[$fieldName]\";";
}
echo "\n";
}
}
然后生成所需的.csv。
但在.csv文件的末尾浏览器的HTML标签正在显示。不应该在那里。
请建议我从生成的.csv文件中删除html内容。
在此先感谢。
答
因为你的函数处理直到最后的请求(即,提供所有数据),并且您不希望框架(你用哪个)来继续处理,添加
exit(0);
去年你的功能线。这将在内容交付后暂停处理,并阻止框架/环境发送其他数据。
答
也许你在头文件操作之前已经有了一些echo命令,那么你想下载的.csv文件将包含你以前写过的所有字符串。
不要试图去除这些字符,即治愈症状,而不是原因。找出那些角色来自哪里,并解决这个问题。首先将该内容写入文件,而不是将其传递给浏览器。您可以通过输出boffering来实现这一点,以便您不必更改上面的代码。然后检查文件内容是否已经包含html字符。我怀疑,在这种情况下,您的代理或缓存尝试成为“智能”存在问题。在这种情况下检查提供的标题。 – arkascha 2013-03-03 07:44:56
感谢@arkascha对你的建议。我通过在函数末尾添加** exit; **语句来完成工作(在csv准备好之后)。 – Sam 2013-03-03 12:52:00
然后您称之为解决方案?所以答案是什么? html序列从哪里来?是什么让你确定类似的事情明天不会再发生?当你想要更好地进行编程时,最重要的是要理解正在发生的事情。这不同于尝试'圆',直到事情似乎工作,不知何故...... – arkascha 2013-03-03 13:19:49