我将HTML与PHP结合起来生成一个网页。我的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;
}
这是我的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
修复此问题。但我想知道是否有任何方法可以自动完成?
答案 0 :(得分: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 :(得分:1)
就像ceejayoz说的那样,没有必要,但如果你想在没有\ t和\ n的情况下这样做,那么
for ($i = 2000;$i<=2012;$i++)
{
$data .= "
<option value='$i'>$i</option>";
}
答案 2 :(得分:0)
不要为生产环境中的标记缩进而烦恼。不要使用HTML美化过滤器来隐藏代码的潜在问题。
如果您需要在开发环境中缩进代码,请注意前面提到的库(Tidy和DOM)将尝试修复您的标记(这是它们的主要目的;缩进是副产品)。
除了缩进之外,Dindent不会尝试消毒或以其他方式操纵您的输出。该库旨在使调试更容易。不要在生产中使用它。
$parser = new \Gajus\Dindent\Parser();
$output = $parser->indent('<p>Your HTML</p>');