PHP/Smarty中输出开头的空格字符-如何跟踪它?

PHP/Smarty中输出开头的空格字符-如何跟踪它?,php,csv,smarty,Php,Csv,Smarty,我正在用smarty处理一个相当大的PHP web应用程序。其中一部分需要以CSV格式输出报告。我设置了所有必需的标题,并将数据传递到smarty模板: $template->assign('headers', $report->get_headers()); $template->assign('data', $report->get_data()); 我的模板如下所示: {strip} {assign var="newline" value="\n"} {forea

我正在用smarty处理一个相当大的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}
[space-char]"ID","Name","Reg date",...
除了一个问题,一切都很好。在某个地方,在输出的最开始处打印了一个空格字符,因此CSV(标题)中的第一行如下所示:

{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}
[space-char]"ID","Name","Reg date",...
结果,Excel弄乱了第一个标题:A1单元格包含
“ID”
(当然没有单引号)。很明显,在某个地方打印这个空间字符是有原因的,但是我怎么才能找到它呢?我试着跟踪报告的执行情况(有几十个php文件是从彼此内部
需要的
,总共有超过10000行代码才能得到报告)。我试着搜索
echo
print
print\r
——但什么都没有。我现在绝望了。任何帮助都将不胜感激


注意:请不要用“让他们修复输出文件”来评论/回答,因为这些是我正在处理的外部客户端:我不能告诉他们“在Excel中打开之前请编辑文件”。

在打开
标记(如果使用了标记)之前,请尝试查找空白。这些是常见的意外出现空格的地方。

在打开
标记(如果使用了)之前,请尝试查找空格。这些都是意外出现空格的常见位置。

如果直接从smarty获取输出,空格在那里吗?还是在呈现smarty模板之前将空格添加到输出中?您仍然可以使用输出筛选器修复它:尝试在打开
标记之前查找空格(如果已使用)。根据我的经验,这种情况通常出现在我的控制器文件(分配模板的php)中。在打开之前,您可能只有一个空格字符“好的,找到了!如果直接从smarty获取输出,则在
之前是一个空格字符,空格在那里吗?还是在呈现smarty模板之前将空格添加到输出中?您仍然可以使用输出筛选器修复它:尝试在打开
标记之前查找空格(如果已使用)。根据我的经验,这种情况通常出现在我的控制器文件(分配模板的php)中。在开头“好的,找到了!在