2012-07-26 26 views
2

我組合了HTML和PHP來生成一個網頁。我的PHP代碼:如何縮進/美化動態生成的HTML?

public function generateSelect() 
{ 
    $data = "<select>\n"; 

    for ($i = 2000;$i<=2012;$i++) 
    { 
     $data .= "\t<option value='$i'>$i</option>\n"; 
    } 
    $data .= "</select>"; 
    $this->data = $data; 
    return $this; 
} 

這是我的HTML:

<div> 
    <?= $data ?> 
</div> 

這是結果:

<div> 
    <select> 
    <option value='2000'>2000</option> 
    <option value='2001'>2001</option> 
    <option value='2002'>2002</option> 
    <option value='2003'>2003</option> 
    <option value='2004'>2004</option> 
    <option value='2005'>2005</option> 
    <option value='2006'>2006</option> 
    <option value='2007'>2007</option> 
    <option value='2008'>2008</option> 
    <option value='2009'>2009</option> 
    <option value='2010'>2010</option> 
    <option value='2011'>2011</option> 
    <option value='2012'>2012</option> 
</select> 
</div> 

我知道,它可以固定\t\n。但我想知道是否有辦法自動執行它?

+3

你爲什麼在意?它可以用Tidy完成,但沒有什麼理由。 – ceejayoz 2012-07-26 21:01:16

+1

@ceejayoz由於我的興趣... – 2012-07-26 21:03:49

+0

接受的答案是否適合你? http://codepad.org/o6vrVkcj – 2013-06-16 14:20:02

回答

6

它可以用PHP的tidy類來完成。以及PHP的DOM擴展名。

<?php 

    $html = <<<HTML 
<div> 
    <select> 
     <option value='2000'>2000</option> 
     <option value='2001'>2001</option> 
     <option value='2002'>2002</option> 
     <option value='2003'>2003</option> 
     <option value='2004'>2004</option> 
     <option value='2005'>2005</option> 
     <option value='2006'>2006</option> 
     <option value='2007'>2007</option> 
     <option value='2008'>2008</option> 
     <option value='2009'>2009</option> 
     <option value='2010'>2010</option> 
     <option value='2011'>2011</option> 
     <option value='2012'>2012</option> 
    </select> 
</div> 
HTML; 

    $dom = new DOMDocument(); 
    $dom->loadXML($html); 

    $dom->formatOutput = true; 
    echo $dom->saveHTML(); 
+1

'DOMDocument'適用於碎片。只要它們有效,它就應該格式化代碼。 – 2012-07-26 21:04:43

+1

謝謝,但我覺得整潔不支持阿拉伯和波斯人的字符... – 2012-07-26 21:05:25

+2

@SoroushKhosravi:DOM的確如此。 – 2012-07-26 21:06:40

1

像ceejayoz說,這是沒有必要的,但如果你想這樣做沒有\ t和\ N:

for ($i = 2000;$i<=2012;$i++) 
{ 
    $data .= " 
    <option value='$i'>$i</option>"; 
} 
+0

反對票的理由? – Matt 2012-08-24 13:55:36

+0

對不起,我的壞。不幸的是,除非你的評論被編輯,否則不能撤銷,所以也許增加一條線,我撤銷,並撤銷你的更改。 – 2012-08-24 14:14:18

+0

@ WebnetMobile.com完成。 – Matt 2012-08-24 14:14:44

0

不要打擾有關在生產環境中的標記壓痕。不要使用HTML美化工具 - 過濾器來隱藏代碼隱藏的問題。

如果您需要在開發環境中縮進代碼,請注意前面提到的庫(Tidy和DOM)將嘗試修正您的標記(這是它們的主要用途;縮進是一種副產品)。

Dindent不會嘗試清理或以其他方式操縱輸出超出縮進。該庫旨在使調試更容易。不要在生產中使用它。

$parser = new \Gajus\Dindent\Parser(); 
$output = $parser->indent('<p>Your HTML</p>');