Проблема с итогом вывода HTML кода при использовании ob_start

Quieteroks

Новичок
Здравствуйте.
Включаем телепатию. :)

Изучаю php второй месяц, пока все работает. А что не работает, нахожу проблему
НО! Учился по разным урокам, и книгам. Так вот, начинаю index.php со строк:

PHP:
ob_start();
session_start();
Потом идет вся логика и обработка, внедрение промежуточных кусков html кода...

Как водится, заканчивается все:
PHP:
$content = ob_get_contents();
ob_end_clean();

include 'index.tpl';
Думаю не суть важно как в переменную записать итог буфера?
В index файле есть echo $content.

Код четко отрабатывает. Но при этом на выводе получается несколько раздражающее.
Так вот вопрос. Тут нужна телепатия. Не знаю как объяснить это...

В index есть строки (упрощено):
PHP:
<div>
<a><img src="logo.gif"></a>
</div>
<?php echo getFunction(); ?>
<?php echo $content; ?>
Функция может возвращать пустую строку: return '';
А $content всегда является html документом, который так же импортировался includом с подстановкой переменных. И тут возникает проблема, которую я не могу понять.

Между логотипом и блоком полученным в $content появляется странный перевод строки.
По сути между лого и контентом нет ничего, кроме двух комментов и нескольких переводов строк, которые видимо генерирует скрипт. Но я до сих пор не могу его выловить.

Наглядно, как должно быть:
ЛОГО
--------------
--------------
Контент
Наглядно, что получается:
ЛОГО
---------------

---------------
Контент
И ладно бы если бы он не был виден. в браузере, так он же ж отображение верстки опускает на это перевод строки... Какой символ может интерпретироваться как перевод строки между двумя блоками div внутри общего div обертки? Чем можно обработать вывод, например trim, что бы убрать его?
 

С.

Продвинутый новичок
Может пока рано телепатию включать, а по-кондовому открыть HTML код и посмотреть, что там стоит?
 
  • Like
Реакции: AmdY

Quieteroks

Новичок
Открывал, смотрел.
Даже в Notepad++ копировал, что бы посмотреть что там за символы.
Усть неизвестные символы, в начале <!--Коммент-->, который он отобразил как ??
Но вот что это за символы, я не в курсе...

Как можно выяснить?
Кодировка всех страниц UTF-8 без DOM
Пробовал удалить... Если коммент порезать, вроде норм...
Кого тримить?
 

Quieteroks

Новичок
Ну пока решил вопрос $content = substr($content, 6);
Может кто знает, что это, почему это и как от этого?
 

Quieteroks

Новичок
Проблему вычислил все таки.
Теперь нужна ваша помощь в том, как избавиться от символа...
В файле шаблонном первый символ имеется, который не удаляется даже в кодировке UTF-8 без DOM и в просто в UTF-8 сохранял...
Пришлось пока начать перед вставкой $content коммент
 

Sufir

Я не волшебник, я только учусь
[offtop]Пиши, пожалуйста, без BOM ане "без DOM". Несколько коробит.[/offtop]
 

SkyLine

Новичок
Проблему вычислил все таки.
Теперь нужна ваша помощь в том, как избавиться от символа...
В файле шаблонном первый символ имеется, который не удаляется даже в кодировке UTF-8 без DOM и в просто в UTF-8 сохранял...
Пришлось пока начать перед вставкой $content коммент
Символ можно убрать например при помощи ф-ции: substr($str, 1); т.е. взять строку начиная с 1го символа (а не с 0го).
 

Quieteroks

Новичок
Символ можно убрать например при помощи ф-ции: substr($str, 1); т.е. взять строку начиная с 1го символа (а не с 0го).
Пробовал. Символ почемуто был не во всех шаблонах. И в итоге он мне отрезал < и комментарий заменил место появления символа... тож не правильно и даже еще хуже...
 

SkyLine

Новичок
Мб тогда стоит проверять первый символ в строке ($str[0]=="<") и если не тот, что нужен, отрезать.

Или так:
PHP:
 if (ord($content) == 239) {
	$content = substr($content, 1);
}
 

С.

Продвинутый новичок
SkyLine, не мешай человеку найти проблему и избавиться от нее. Не предлагай ее своими соплями замазывать.
 

Quieteroks

Новичок
Мб тогда стоит проверять первый символ в строке ($str[0]=="<") и если не тот, что нужен, отрезать.

Или так:
PHP:
 if (ord($content) == 239) {
	$content = substr($content, 1);
}
Я об этом думал. Но эт дополнительная проверка.
Тем более файл можно сохранить без него.
Пробовал notepad++ в utf8 без bom сохранял на прямую в file.TPL
Может в этом проблема? никто не сталкивался?
 

Tadochi

Новичок
решил проблему. оказалось что все таки один файл был UTF with BOM
 
Сверху