如何保持PHP'View Source'html输出干净

时间:2009-06-04 05:06:02

标签: php html browser

在检查网站上的来源后,这一直困扰着我。我在模板中使用PHP输出来获取动态内容。模板仅以html开头,并且干净地缩进和格式化。然后添加PHP内容并缩进以匹配html格式化。

<ul>
  <li>nav1</li>
  <li>nav2</li>
  <li>nav3</li>
</ul>

变为:

<ul>
  <?php foreach($navitems as $nav):?>
  <li><?=$nav?></li>
  <?php endforeach; ?>
</ul>

当在html中输出时,封装的PHP行被删除但用于格式化它们的空白空间被保留并且抛出视图源格式化所有这些都没有。我提到的网站在视图源输出上格式干净。我应该假设他们正在使用一些模板引擎吗?还有什么办法可以清理我的模板类型吗?没有手动删除空白并牺牲开发方的可读性?

12 个答案:

答案 0 :(得分:13)

这也是困扰我的事情。您可以做的最好是使用整洁来后处理文本。将此行添加到页面的开头(当遇到第一个出现输出缓冲的PHP错误时,请准备好output buffering havoc):

ob_start('ob_tidyhandler');

答案 1 :(得分:6)

你无法从内联PHP中获得干净的输出。我强烈建议使用某种模板引擎,例如Smarty。除了干净的输出外,模板引擎还具有在代码和设计之间保持一定分离的优势,从而提高了复杂网站的可维护性和可读性。

答案 2 :(得分:4)

我承认,我也喜欢干净,漂亮的缩进html。通常它不会按照我想要的方式运作,因为你有同样的理由。有时手动缩进和换行没有保留,或者因为重置缩进的子模板而无效。

机器真的不在乎。不是关于空白,不是关于评论,他们唯一可能关心的是缩小的东西,所以额外的空格和评论实际上是适得其反的。但它非常漂亮{​​{1}}

有时,如果firebugs不可用,我只是喜欢调试。因为在大多数情况下我可以选择为当前请求手动激活html整理。注意:整洁自动纠正某些错误(取决于配置选项),因此它实际上可能隐藏错误。

答案 3 :(得分:4)

“漂亮”的HTML输出是否重要?每当你想要浏览它时,你都会将输出HTML粘贴到编辑器中,编辑器可能会选择正确地格式化它(或者你需要切换编辑器!)。

我发现建议使用额外的模板语言(因为这正是PHP所用的)令人憎恶。你会减慢每一页的速度以纠正奇数空间或标签?如果有的话,我会转向另一个方向并倾向于通过工具运行每个页面删除剩余的空白。

答案 4 :(得分:4)

我这样做的方式是:

    <ul>
<?php foreach($navitems as $nav):?>
      <li><?=$nav?></li>
<?php endforeach; ?>
    </ul>

基本上我的所有条件和循环块在视图中都是齐平的。如果它们是嵌套的,我会在PHP开始标记内缩进,如下所示:

    <ul>
<?php foreach($navitems as $nav):?>
<?php     if($nav!== null) : ?>
      <li><?=$nav?></li>
<?php     endif; ?>
<?php endforeach; ?>
    </ul>

这样,当我浏览代码时,我清楚地看到了表示逻辑,并且它也提供了干净的HTML输出。块内的输出正是我放置的位置。

虽然警告,但PHP在结束标记?>之后会占用换行符。当您在<pre>块内输出时,这会成为一个问题。

<pre>
<?php foreach($vars as $var ) ?>
    <?=$var?>
<?php endforeach; ?>
</pre>

这将输出:

<pre> 
            0            1            2            3            4            5        </pre> 

这是一种黑客行为,但在<?=$var?>之后添加空格使其变得干净。

对于过多的代码块感到抱歉,但这也困扰了我很长一段时间。希望它在大约7个月后有所帮助。

答案 5 :(得分:3)

我几次整理输出以调试生成的HTML代码我使用了标签和换行符...即

print "<table>\n";
print "\t<tr>\n";
print "\t\t<td>\n";
print "\t\t\tMy Content!\n";
print "\t\t</td>\n";
print "\t</tr>\n";
print "</table>\n";

答案 6 :(得分:3)

当我读到“我真的很好奇为什么你认为生成具有”可读性“的HTML非常重要时我感到好奇。不幸的是,这个页面(和其他地方)有很多人都这么想。 ..浏览器读取的内容相同,所以为什么要担心代码的外观。

首先,保持“代码”可读性使得几乎在所有情况下调试(或者将来由您或开发人员在其中工作)变得更加容易。

此外,最重要的是,它被称为工艺质量。这是Yugo和梅赛德斯之间的区别。是的,它们都是汽车,它们都会带你从“A”点到“B”点。但是,差异在于产品的质量,主要是。没有什么比跳进项目并首先为了能够理解事物而清理别人的代码更糟糕的了,所有这些都是因为他们认为它仍然有效并且对他们所做的事情并不感到自豪。更清洁的代码将永远使您和其他任何必须处理它的人受益,更不用说反映出您所做的事情的自豪感和专业知识。

答案 7 :(得分:2)

如果在特定情况下它真的很重要,你可以这样做......

<ul><?php foreach($navitems as $nav):?>
  <li><?=$nav?></li><?php endforeach; ?>
</ul>

虽然在我看来这更糟糕,因为你的代码可读性较差,即使HTML是你想要的。

答案 8 :(得分:2)

我不关心输出是多么干净 - 这是产生它的原始源代码,必须易于解析 - 对于我作为开发人员而言。

如果我正在检查输出,我会通过整理来清理它,如果需要仔细查看它 - 但验证器也不关心额外的空格或标签。

事实上,我更有可能从输出HTML中删除空格,而不是在线上放置任何更少的字节=更快的下载。不是很多,但有时它会在高流量情况下有所帮助(当然,gzipping输出有助于更多)。

答案 9 :(得分:1)

使用多个嵌套的div和许多包含这些div的记录来查看未格式化的源代码非常烦人。

我遇到了这个名为Phoenix Editor的firefox插件。你可以在它的编辑器中查看你的来源,然后点击“格式”,它就像一个魅力!

Link Here

答案 10 :(得分:1)

我同意,一个干净的来源非常重要,它对这些来源,脚本或代码的评论很好,结构合理,维护非常快速和简单。你应该在相应的地方使用require(prior.php,header.php,title.php,content.php,post.php)来分析你的main,然后在previous.php下编写一个新函数来解析和布局使用explode方法和字符串拆分器的html标签,有一个用于tab索引的整数,每当函数字符串中有</时,整数 - 只要<>但不是{{ 1}}和/>在字符串整数++中,并且必须正确放置....,使用for循环重建另一个字符串tabindex以标记内容整数倍。

答案 11 :(得分:1)

尝试xtemplate http://www.phpxtemplate.org/HomePage它没有像id那样记录,但是我用它来产生很好的效果

你会有这样的东西

    <?php
$response = new xtemplate('template.htm');

foreach($navitems as $item)
{

$response->assign('stuff',$item);

$response->parse('main.thelist');

}
$response->parse('main');
$response.out('main');
?>
 And the html file would contain

    <! -- BEGIN: main -->
<html>
<head></head>
<body>
    <ul>
<! -- BEGIN: thelist -->
      <li>{stuff}</li>
<!-- END: thelist -->
</ul>
</body>
</html>