我正在使用智能的PHP处理一个相当大的Web应用程序。其中一部分需要以CSV格式吐出报告。我设置了所有必需的标题并将数据传递给smarty模板:
$template->assign('headers', $report->get_headers());
$template->assign('data', $report->get_data());
我的模板如下所示:
{strip}
{assign var="newline" value="\n"}
{foreach from=$headers item=h name=hdr}
"{$h|replace:'"':'""'}"
{if !$smarty.foreach.hdr.last},{/if}
{/foreach}
{$newline}
{if trim($warntext) != ''}
"{$warntext|replace:'"':'""'}"
{$newline}
{/if}
{foreach from=$data item=row name=res}
{foreach from=$row item=v name=val}
"{$v|replace:'"':'""'}"
{if !$smarty.foreach.val.last},{/if}
{/foreach}
{if !$smarty.foreach.res.last}{$newline}{/if}
{/foreach}
{/strip}
一切正常 - 除了一个问题。某处有一个空格字符在输出的最开头打印,因此CSV(标题)中的第一行如下所示:
[space-char]"ID","Name","Reg date",...
结果,Excel弄乱了第一个标题:A1单元格包含' "ID"'
(当然没有单引号)。显然,有一些地方可以打印这个空间字符 - 但我怎么能找到它呢?我试着跟踪报告的执行情况(有几十个php文件是required
来自内部 - 总共有超过10K行代码来获取报告)。我尝试搜索echo
和print
以及print_r
- 但没有。我现在变得绝望了。任何帮助将不胜感激。
P.S。请不要评论/回答“让他们只修复输出文件”,因为这些是我正在处理的外部客户:我不能告诉他们'请在打开Excel之前编辑文件'。
答案 0 :(得分:1)
尝试在打开<?php
标记之前和关闭?>
标记后立即查找空格(如果使用的话)。这些是意外占用空间的常见地方。