繁体   English   中英

如何在 PHP 中回显 HTML?

[英]How can I echo HTML in PHP?

我想有条件地输出 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";

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

1.在PHP标签之间

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

2. 在回声中

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

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

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

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

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

3. 继承人

4. Nowdocs(自 PHP 5.3.0 起)

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

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

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

如果您有更多问题,请随时发表评论。

PHP 文档中可以进一步阅读这些内容。


注意: PHP 短标签<? ?>是不鼓励的,因为它们只有在使用short_open_tag php.ini 配置文件指令启用时才可用,或者如果 PHP 配置了--enable-short-tags选项。 无论 5.4 以后的设置如何,它们都可用

像这样尝试( heredoc语法):

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

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

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

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

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

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

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

<?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 echo $var; ?> <?php echo $var; ?>而不是<?=$var?>取决于您的 PHP 设置。

我偏爱这种风格:

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

我确实使用 ASP 样式的标签,是的。 PHP 和 HTML 的混合在我看来超级可读。 诀窍是让<%%>标记恰到好处。

另一种方法是将 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 写出来,抓住它,然后再写一遍,这似乎很奇怪,但这确实意味着你可以做各种格式化的东西( heredoc等),并且测试它的输出是否正确,而不会出现页面的麻烦模板妨碍了。 (顺便说一句, Joomla CMS就是这样做的。)

IE:

<?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
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

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

只需使用打印函数来回显 PHP 文件中的文本,如下所示:

<?php

  print('
    <div class="wrap">

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

    </div>
  ')
?>

除了Chris B 的回答,如果您无论如何都需要使用echo ,仍然希望保持简单和结构化,并且不想用<?php stuff; ?>向代码发送垃圾邮件<?php stuff; ?> <?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比连接更有效。

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

或者

echo "<html>\n<body>\n</body>\n</html>\n";

尝试这个:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>

不要回显 HTML。

如果你想使用

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

你应该这样做:

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

这就是我的做法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM