2010-10-10 37 views
0

最近,我正在爲我一直在處理的項目打印一些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標籤有從左邊兩個tab縮進 - 這很好。然而,LI標籤左側有5個縮進 - 如果按照我的代碼進行,它應該只有3個縮進。最終的UL標籤還有兩個額外的縮進。

這只是預期的行爲還是可以糾正?

+1

爲什麼要擔心呈現的HTML?作爲一名開發人員,您需要保持您的_code_易讀且易於維護。最終用戶只關心實際顯示的內容,而不關心頁面的源代碼。 – Alec 2010-10-10 18:35:25

回答

0

那麼?輸出完美匹配您的代碼。我不明白,爲什麼會出現問題?

*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內。

0

所有那些在<?php...?>標籤之外的標籤仍然未被PHP解釋器使用。唯一的例外是尾隨的換行符,其後跟隨結束標記as documented

您可能在混合製表符和空格。如果您使用的是像樣的編輯器,應該有一個功能讓它們可見。

+0

我正在使用記事本++。他們肯定是標籤,而不是空間... – GSTAR 2010-10-10 18:24:02

+0

downvote的任何具體原因? – 2010-10-10 18:30:29

+0

@GSTAR,請仔細檢查您的PHP源代碼。我很確定PHP標籤之外的標籤與HTML輸出中的標籤匹配。 – 2010-10-10 18:32:49

1

如果你擔心縮進問題,你可以將php標記移動到它們的行首,然後當它們崩潰時,不會有額外的縮進,這就增加了他的下一行。那當然會讓你的源頭難以閱讀。這比讀取呈現的HTML IMO更重要。

1

問題是你已經縮進了整個塊。空間是來自<?php?每條線上有>

0

好吧,換行符在你的代碼中是正確的。 Everything except the line break immediately after ?> gets put out

[...] PHP碰到?>結束標記時,它只是開始輸出任何它認爲(除了緊隨其後的換行符 - 見instruction separation)直到碰到下一個開始標記。

所以只盯着這個例子:

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

<?php } 

惟獨沒有立即行突破後?>被放了出來,其中包括以下<?php之前斷行,所以:

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