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行代碼來獲取報告)。我試圖尋找echo
和print
和print_r
- 但沒有。我現在越來越絕望了。任何幫助將不勝感激。
P.S.請不要評論/回答「讓他們修正輸出文件」,因爲這些是我正在處理的外部客戶:我不能告訴他們'請在Excel中打開之前編輯文件'。
如果你從smarty直接獲取輸出是那裏的空間?或者是在smarty模板呈現之前將空間添加到輸出中? – GWW
您仍然可以通過輸出過濾器修復它:http://php.net/manual/en/function.ob-start.php – hakre
嘗試在打開'<?php'標籤之前尋找空格,並在關閉'之後立即尋找空格? >標籤(如果使用的話)。這些是常見的地方有空間有空間。 –