Пробел в начале вывода в PHP / Smarty - как это отследить? - PullRequest
1 голос
/ 10 августа 2011

Я имею дело с довольно большим веб-приложением на 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 '.

1 Ответ

1 голос
/ 10 августа 2011

Попробуйте поискать пробелы непосредственно перед открытием тегов <?php и сразу после закрытия тегов ?> (если они вообще используются). Это обычные места для случайного пробела.

...