2011-08-10 42 views
1

我正在用smarty處理PHP中一個相當大的Web應用程序。其中一部分需要以CSV格式分發報告。我設置所有必需的頭和數據傳遞到Smarty模板:PHP/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單元格中包含​​(當然沒有單引號)。顯然,有些地方印刷這個空間字符 - 但我怎麼能找到它?我試圖追蹤報告的執行情況(有幾十個php文件在內部是required - 總共有超過10K行代碼來獲取報告)。我試圖尋找echoprintprint_r - 但沒有。我現在越來越絕望了。任何幫助將不勝感激。

P.S.請不要評論/回答「讓他們修正輸出文件」,因爲這些是我正在處理的外部客戶:我不能告訴他們'請在Excel中打開之前編輯文件'。

+3

如果你從smarty直接獲取輸出是那裏的空間?或者是在smarty模板呈現之前將空間添加到輸出中? – GWW

+0

您仍然可以通過輸出過濾器修復它:http://php.net/manual/en/function.ob-start.php – hakre

+0

嘗試在打開'<?php'標籤之前尋找空格,並在關閉'之後立即尋找空格? >標籤(如果使用的話)。這些是常見的地方有空間有空間。 –

回答

1

嘗試在打開<?php標記之前尋找空格,然後關閉?>標記(如果使用的話)。這些是常見的地方有空間有空間。

相關問題