如何在PHP中回显HTML?

时间:2009-07-08 20:24:51

标签: php html 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";

13 个答案:

答案 0 :(得分:253)

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

1。在PHP标签之间

<?php if(condition){ ?>
     <!-- HTML here -->
<?php } ?>

2。在回声中

if(condition){
     echo "HTML here";
}

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

echo '<input type="text">';

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

echo "<input type=\"text\">";

3。 here文档

4。 Nowdocs(从PHP 5.3.0开始)

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

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

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

如果您还有其他问题,请随时发表评论。 有关这些内容的更多信息,请参见PHP Documentation

上帝保佑!


注意:不建议使用PHP短标记<??>,因为它们仅在使用short_open_tag php.ini配置文件指令启用时才可用,或者PHP配置了--enable-short-tags选项。 They are available, regardless of settings from 5.4 onwards

答案 1 :(得分:63)

尝试这样:

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

</body>
</html>
XYZ;
echo $variable;

答案 2 :(得分:29)

你可以使用alternative syntax alternative syntax for control structures并突破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; ?>

答案 3 :(得分: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>

注意:根据您的PHP设置,您可能需要使用<?php echo $var; ?>而不是<?=$var?>

答案 4 :(得分:7)

我偏爱这种风格:

  <html>
    <head>
<%    if (X)
      {
%>      <title>Definitely X</title>
<%    }
      else
      {
%>      <title>Totally not X</title>
<%    }
%>  </head>
  </html>

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

答案 5 :(得分:7)

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

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

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

将php写出来,抓住它然后再写一遍可能看起来很奇怪,但它确实意味着你可以做各种格式化的东西(Heredocs等),&amp;测试它输出正确,没有页面模板的麻烦妨碍。 (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

答案 6 :(得分:2)

$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

echo( 'Echo as HTML' . htmlspecialchars( (string)$enter_string ) );

答案 7 :(得分:2)

试试这个可以帮助你.......

<?php
echo <<<HTML

your html tags here

HTML;
?>

答案 8 :(得分:1)

除了Chris B's回答之外,如果您还需要使用echo,还是希望保持简单和结构化,并且不希望使用<?php stuff; ?>的垃圾邮件代码,您可以使用以下语法。

例如,您想要显示图库的图像:

foreach($images as $image)
{
    echo
    '<li>',
        '<a href="', site_url(), 'images/', $image['name'], '">',
            '<img ',
                'class="image" ',
                'title="', $image['title'], '" ',
                'src="', site_url(), 'images/thumbs/', $image['filename'], '" ',
                'alt="', $image['description'], '"',
            '>',
        '</a>',
    '</li>';
}

Echo需要多个参数,所以好的缩进看起来非常好。同时使用带参数的echo比连接更有效。

答案 9 :(得分:1)

不要回显HTML

如果你想使用

<?php echo "<h1>  $title; </h1>"; ?>

你应该这样做:

<h1><?= $title;?></h1>

答案 10 :(得分:1)

只需使用打印功能在PHP文件中回显文本,如下所示

<?php

  print('

    <div class="wrap">

      <span class="textClass">TESTING</span>

    </div>


  ')

?>

答案 11 :(得分:1)

    // import this
    import AVFoundation

    // create a sound ID, in this case its the tweet sound.
    let systemSoundID: SystemSoundID = 1016

    // to play sound
    AudioServicesPlaySystemSound (systemSoundID)

echo '
<html>
<body>
</body>
</html>
';

答案 12 :(得分:0)

这是我的方法:

<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>