简体   繁体   English

如何缩进/美化动态生成的HTML?

[英]How to indent/beautify dynamically generated HTML?

I combined HTML with PHP to generate a web page. 我将HTML与PHP结合起来生成一个网页。 My PHP code is: 我的PHP代码是:

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;
}

And this is my HTML: 这是我的HTML:

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

And this is the result: 这就是结果:

<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>

I know that it can be fixed with \\t and \\n . 我知道它可以用\\t\\n修复。 But I want to know if there is any way to do it automatically? 但我想知道是否有任何方法可以自动完成?

It can be done with PHP's tidy class. 它可以用PHP的tidy类来完成。 As well as PHP's DOM extension. 以及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();

Like ceejayoz said, it's not necessary, but if you want to do it without \\t and \\n: 就像ceejayoz说的那样,没有必要,但如果你想在没有\\ t和\\ n的情况下这样做:

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

Do not be bothered about the markup indentation in the production environment. 不要对生产环境中的标记缩进感到困扰。 Do not use HTML beautifiers-filters to hide the underlying issues with the code. 不要使用HTML美化过滤器来隐藏代码的潜在问题。

If you need to indent your code in the development environment, beware that earlier mentioned libraries (Tidy and DOM) will attempt to fix your markup (that's their primary purpose; indentation is a by-product). 如果您需要在开发环境中缩进代码,请注意前面提到的库(Tidy和DOM)将尝试修复您的标记(这是它们的主要目的;缩进是副产品)。

Dindent will not attempt to sanitise or otherwise manipulate your output beyond indentation. 除了缩进之外, Dindent不会尝试消毒或以其他方式操纵您的输出。 This library is designed to make debugging easier. 该库旨在使调试更容易。 Do not use it in production. 不要在生产中使用它。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM