簡體   English   中英

html輸出中的換行和縮進

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM