разрывы строк и отступы в html-выходе

Недавно я печатал некоторый HTML-источник для проекта, над которым я работал. Мне нравится держать мою разметку аккуратной и удобочитаемой. Я заметил, что в некоторых местах нет разрывов строк на выведенном html, а в некоторых местах есть лишний отступ. Например, возьмите следующий код, где я сохранил отступ из исходного файла:

<div id="sections"> <ul> <?php if(!empty($details)) { ?> <li><a href="#details"><span>Details</span></a></li> <?php } if(!empty($address) { ?> <li><a href="#viewmap"><span>Location Map</span></a></li> <?php } if(!empty($reviews) { ?> <li><a href="#reviews"><span>Reviews (<?php echo $numrows; ?>)</span></a></li> <?php } if($email != null) { ?> <li><a href="#sendemail"><span>Send an Email</span></a></li> <?php } ?> </ul> 

Сгенерированный вывод HTML выглядит следующим образом:

  <div id="sections"> <ul> <li><a href="#details"><span>Details</span></a></li> <li><a href="#viewmap"><span>Location Map</span></a></li> <li><a href="#sendemail"><span>Send an Email</span></a></li> </ul> </div> 

Здесь мы видим, что теги DIV и UL имеют два вкладки слева слева – это прекрасно. Однако теги LI имеют 5 отступов слева – это должно быть только 3, если оно соответствует моему коду. Конечный тег UL также имеет два дополнительных отступов.

Это просто ожидаемое поведение или это можно как-то исправить?

Так? Результат идеально подходит вашему коду. Я не понимаю, почему возникла проблема?

 *tab**tab*<div id="sections">*newline* *tab**tab*<ul>*newline* *tab**tab*<?php if(!empty($details)) { ?> *tab**tab**tab*<li><a href="#details"><span>Details</span></a></li>*newline* *newline* *tab**tab*<?php } if(!empty($address) { ?> *tab**tab**tab*<li><a href="#viewmap"><span>Location Map</span></a></li>*newline* *newline* *tab**tab*<?php } if(!empty($reviews) { ?> *tab**tab**tab*<li><a href="#reviews"><span>Reviews (<?php echo $numrows; ?>)</span></a></li>*newline* *newline* *tab**tab*<?php } if($email != null) { ?> *tab**tab**tab*<li><a href="#sendemail"><span>Send an Email</span></a></li>*newline* *tab**tab*<?php } ?> *tab**tab*</ul> 

Удалите php-код, и вы увидите, что совпадают числа вкладок и новых строк.

О и btw: первая ul должна иметь вкладку больше, потому что она находится внутри div.

Если вы беспокоитесь о вдавливании, вы можете переместить ваши теги php в начало их строк, тогда, когда они рухнут, не будет дополнительного отступа, который добавит его в следующую строку. Это, конечно, делает ваш источник гораздо труднее читать. И это гораздо важнее, чем чтение рендеринга html IMO.

Проблема в том, что вы отделили весь блок. Пробел идет от <? Php?> На каждой строке

Все, что вне тегов <?php...?> Остается нетронутым интерпретатором PHP. Единственное исключение – это трейлинг-линия, которая промежуточно следует за закрывающим тегом, как задокументировано .

Возможно, вы смешиваете вкладки и пробелы. Если вы используете достойный редактор, должна быть функция, чтобы сделать их видимыми.

Ну, разрывы строк верны в вашем коде. Все, кроме разрыва строки сразу после ?> Получает потушить :

[…], когда PHP попадает в теги ?> Закрытия, он просто начинает выводить все, что он находит (за исключением сразу следующей строки новой строки – см. Разделение команд ), пока он не попадет в другой тег открытия.

Поэтому просто посмотрим на этот пример:

 <?php if(!empty($details)) { ?> <li><a href="#details"><span>Details</span></a></li> <?php } 

Все, кроме строки, прерывается сразу после того, как ?> Вытаскивается, включая разрыв строки перед следующим <?php , так:

  <li><a href="#details"><span>Details</span></a></li> ‍