簡體   English   中英

我可以配置 PHP 自動格式化它生成的 HTML 嗎?

[英]Can I configure PHP to automatically format the HTML it generates?

例如…

這個PHP碼

<?php
echo '<html>';
echo '<body>';
echo '<h1>Header One</h1>';
echo '<p>Hello World!</p>';
echo '</body>';
echo '</html>';
?>

生成這個 HTML 標記

<html><body><h1>Header One</h1><p>Hello World!</p></body></html>

是否有任何函數、庫或配置選項可以使 PHP 根據 output 中生成的 html 標簽的嵌套自動應用一些簡單的格式(換行符和縮進)? 所以會產生這樣的東西......

<html>
      <body>
            <h1>Header One</h1>
            <p>Hello World!</p>
      </body>
</html>

您可以嘗試使用SmartySavantPHP SugarVLib等模板引擎。

或者你可以 go 突擊隊與output 處理(我認為這是一個黑客)。 ob_start('ob_tidyhandler');

對於 output 處理,可能未安裝或啟用 Tidy,通常您需要安裝的 package 名為php-tidy ,您需要在 php.ini 中取消注釋extension=tidy

您可以將 html 放入 PHP 腳本中,而無需回顯它。 您可能還想尋找像smarty這樣的 PHP 模板引擎,這樣您就可以將視圖與邏輯分開。

我更喜歡使用heredoc 字符串並自己格式化/縮進 HTML。 在 PHP 代碼中混合 HTML 字符串很快會導致代碼不可讀、不可維護。 這種方法的一些優點:

  • 引號不需要轉義。
  • 您可以將變量放在 heredoc 字符串中。
  • 即使在使用循環代碼時,您也可以在 heredoc 字符串中使用 output 和 HTML。 如果這些字符串相對於 HTML 的其他塊正確縮進,您仍然會得到縮進良好的 HTML 代碼。
  • 它迫使您考慮何時要打印 HTML,並以塊的形式打印它,而不是散布在整個代碼中的許多小片段(非常難以閱讀和維護)。

最好將 PHP 代碼盡可能多地與 HTML 分開,無論這意味着使用模板引擎還是將所有代碼放在所有 HTML 之前。但是,仍然有一些時候最容易混合 PHP 和 HTML .

這是一個例子:

<?php
$text = 'Hello World!';
echo <<<HTML
<html>
    <body>
        <h1>Header One, with some '"quotes"'</h1>
        <p>$text</p>
    </body>
</html>

HTML;
?>

如果我對你的問題的理解是正確的,你想要漂亮地打印 HTML output。

這可以通過后處理 PHP 腳本的 output 來完成。 通過使用 PHP 的 output 處理功能結合整潔的擴展文檔

ob_start('ob_tidyhandler');

Tidy 是專門用於清理 HTML 代碼、更改縮進等的擴展。但這不是唯一的方法。

另一種選擇是將后處理任務委托給網絡服務器,例如Apache HTTP Server Docs中的 output 過濾器

...或者您可以使用“<<<”運算符,您可以在其中自行設置格式:

<?php

echo <<<DATA
<html>
      <body>
            <h1>Header One</h1>
            <p>Hello World!</p>
      </body>
</html>
DATA;

你可以這樣做(我的偏好):

<html>
      <body>
            <h1>Header One</h1>
            <p>Hello World!</p>
            <?php echo '<p>Hello Hello!</p>'; ?>
      </body>
</html>

要么:

<?php

$html = '<html><body><h1>Header One</h1><p>Hello World!</p></body></html>';

$tidy = new tidy();
$tidy->parseString($html, array('indent'=> true,'output-xhtml'=> true), 'utf8');
$tidy->cleanRepair();

echo $tidy;

?>";

...將打印:

<html>
      <body>
            <h1>Header One</h1>
            <p>Hello World!</p>
      </body>
</html>

如果下面的代碼看起來對生成 html 和 php 有用,試試這個庫https://github.com/raftalks/Form

Html::make('div', function($html))
{
    $html->table(function($table)
    {
        $table->thead(function($table)
        {
            $table->tr(function($tr)
            {
                $tr->th('item');
                $tr->th('category');
            });
        });


        $table->tr(function($tr)
        {   
            $tr->td()->ng_bind('item.name','ng-bind');
            $tr->td()->ng_bind('item.category','ng-bind');

            $tr->setNgRepeat('item in list','ng-repeat'); //using second parameter to force the attribute name.
        });

        $table->setClass('table');
    });

   $html->setClass('tableContainer');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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