如何在PHP中回显HTML?

Rob*_*cks 119 html php templates echo

我想有条件地输出HTML来生成一个页面,那么在PHP 4+中回显多行HTML片段的最简单方法是什么?我需要使用像Smarty这样的模板框架吗?

echo '<html>', "\n"; // I'm sure there's a better way!
echo '<head>', "\n";
echo '</head>', "\n";
echo '<body>', "\n";
echo '</body>', "\n";
echo '</html>', "\n";
Run Code Online (Sandbox Code Playgroud)

Chr*_*ier 262

有几种方法可以在PHP中回显HTML.

1.在PHP标签之间

<?php if(condition){ ?>
     <!-- HTML here -->
<?php } ?>
Run Code Online (Sandbox Code Playgroud)

2.回声

if(condition){
     echo "HTML here";
}
Run Code Online (Sandbox Code Playgroud)

使用echos,如果您希望在HTML中使用双引号,则必须使用单引号回声,如下所示:

echo '<input type="text">';
Run Code Online (Sandbox Code Playgroud)

或者你可以像这样逃避它们:

echo "<input type=\"text\">";
Run Code Online (Sandbox Code Playgroud)

3. Heredocs

4. Nowdocs(自PHP 5.3.0起)

模板引擎用于在主要包含HTML的文档中使用PHP.事实上,PHP的最初目的是成为一种模板语言.这就是为什么使用PHP可以使用短标签来回显变量(例如<?=$someVariable?>).

还有其他模板引擎(如Smarty,Twig等)使语法更简洁(例如{{someVariable}}).

使用模板引擎的主要好处是使设计(表示逻辑)与编码(业务逻辑)分开.从长远来看,它还使代码更清晰,更易于维护.

如果您有任何其他问题,请随时发表评论.有关这些内容的更多信息,请参阅PHP文档.

上帝保佑!


注意:不建议使用PHP短标记<?,?>因为它们仅在使用short_open_tagphp.ini配置文件指令启用时才可用,或者如果PHP配置了该--enable-short-tags选项.无论5.4以后的设置如何,它们都可用.

  • 在条件范围内HTML是一个很好的解决方案. (7认同)
  • 不应该"/*HTML here*/"真的是"<! - HTML here - >"?;) (7认同)

lfx*_*lfx 64

试试这样:

$variable = <<<XYZ
<html>
<body>

</body>
</html>
XYZ;
echo $variable;
Run Code Online (Sandbox Code Playgroud)

  • @MhdSyrwan只是随机字符,你可以在这里阅读更多http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc (8认同)
  • "XYZ"在这里意味着什么? (4认同)
  • 愿意详细说明吗?我没有看到 PHP 左括号或右括号,但看到了 HTML 和 PHP,所以是吧?- 该链接有效并且可以更好地回答它,但也许它应该在答案文本中,而不是在评论中? (2认同)

Tom*_*igh 29

您可以使用替代语法替代语法来控制结构并打破php:

<?php if ($something): ?>
    <some /> <tags /> <etc />
    <?=$shortButControversialWayOfPrintingAVariable ?>
    <?php /* A comment not visible in the HTML but is a bit of a pain to write */ ?>
<?php else: ?>
    <!-- else -->
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)


Dis*_*oat 15

基本上你可以把HTML放在PHP标签之外的任何地方.在显示任何数据之前进行所有必要的数据处理也是非常有益的,以便分离逻辑和表示.

数据显示本身可以位于同一PHP文件的底部,或者您可以包含一个单独的PHP文件,该文件主要由HTML组成.

我更喜欢这种紧凑的风格:

<?php
    /* do your processing here */
?>

<html>
<head>
    <title><?=$title?></title>
</head>
<body>
    <?php foreach ( $something as $item ) : ?>
        <p><?=$item?></p>
    <?php endforeach; ?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

注意:您可能需要使用<?php echo $var; ?>而不是<?=$var?>依赖于PHP设置.


Joh*_*ica 7

我偏爱这种风格:

  <html>
    <head>
<%    if (X)
      {
%>      <title>Definitely X</title>
<%    }
      else
      {
%>      <title>Totally not X</title>
<%    }
%>  </head>
  </html>
Run Code Online (Sandbox Code Playgroud)

我确实使用ASP风格的标签,是的.PHP和HTML的混合看起来非常易读.诀窍是让<%%>标记恰到好处.

  • 是的,但是当他们持续时得到他们 - 他们被从PHP中移除(不确定哪个版本......如果他们还没有去过) (3认同)

jul*_*ulz 7

另一种方法是将HTML放在一个单独的文件中,并在这种情况下用占位符[[content]]标记要更改的区域.(您也可以使用sprintf而不是str_replace.)

$page = 'hello world';
$content = file_get_contents('html/welcome.html');
$pagecontent = str_replace('[[content]]',$content,$page);
echo($pagecontent);
Run Code Online (Sandbox Code Playgroud)

或者,您可以将所有php内容输出到缓冲区中捕获的屏幕,然后编写html,然后将php输出放回页面.

将php写出来,抓住它然后再写一遍可能看起来很奇怪,但它确实意味着你可以做各种格式化的东西(Heredocs等),并测试它输出正确而没有页面模板的麻烦进入方式.(Joomla CMS这样做,BTW)即:

<?php
ob_start();
echo('hello world');
$php_output = ob_get_contents();
ob_end_clean();
?>
<h1> My Template page says </h1>
<?php
echo($php_output );
?>
<hr>
template footer
Run Code Online (Sandbox Code Playgroud)