How to indent/beautify dynamically generated HTML?

html, php

Solution

It can be done with PHP's `tidy` class. As well as PHP's `DOM` extension.

<?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();

Problem

I combined HTML with PHP to generate a web page. My PHP code is: ``` 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: ``` <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`. But I want to know if there is any way to do it automatically?

Original source