[英]line breaks and indentation in html output
最近,我正在為我正在從事的項目打印一些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標簽也有兩個額外的縮進。
這僅僅是預期的行為還是可以通過某種方式糾正?
如果您擔心縮進,可以將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>
所以? 輸出與您的代碼完全匹配。 我不明白,為什么會有問題?
*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代碼,您會看到制表符和換行符的數量匹配。
哦,順便說一句:第一個ul應該有一個制表符,因為它位於div中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.