Я имею дело с довольно большим веб-приложением на PHP с smarty.Одна часть этого требует выплевывать отчет в формате 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
- всего более 10 тысяч строк кода для получения отчета).Я пытался найти echo
и print
и print_r
- но ничего.Я сейчас в отчаянии.Любая помощь будет принята с благодарностью.
PS Пожалуйста, не комментируйте / отвечайте «пусть они просто исправят выходной файл», так как это внешние клиенты, с которыми я имею дело: я не могу сказать им:отредактируйте файл перед открытием в Excel '.