如何在 PHP 中回显 HTML?

我想有条件地输出 HTML 来生成一个页面,那么在 PHP4 + 中回显 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";
708324 次浏览

你可以使用 控制结构的可选语法突破 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; ?>

试试这样(Herdoc语法) :

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


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

我偏爱这种风格:

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

我确实使用 ASP 风格的标签,是的。在我看来,PHP 和 HTML 的混合看起来超级可读。诀窍在于使 <%%>标记正确。

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

1. 在 PHP 标签之间

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

2. 在回声中

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

对于 Echo,如果你想在 HTML 中使用双引号,你必须像下面这样使用单引号 Echo:

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

或者你可以这样逃避:

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

3. 异端

4. Nowdocs (从 PHP5.3.0开始)

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

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

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

如果你还有其他问题,欢迎留言。

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


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

基本上,您可以将 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 设置,您可能需要使用 <?php echo $var; ?>而不是 <?=$var?>

另一种方法是将 HTML 放在一个单独的文件中,在本例中用占位符[[ content ]]标记要更改的区域。(还可以使用 sprintf 代替 str _ place。)

$page = 'Hello, World!';
$content = file_get_contents('html/welcome.html');
$pagecontent = str_replace('[[content]]', $content, $page);
echo($pagecontent);

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

把 PHP 写出来,抓住它,然后再写一遍,这可能看起来很奇怪,但这确实意味着你可以做各种格式化工作(Herdoc等) ,并且可以正确地测试它的输出,而不会受到页面模板的干扰。(顺便说一句,Joomla CMS就是这样做的。)

例如:

<?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

除了 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比连接更有效。

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


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

试试这个:

<?php
echo <<<HTML


Your HTML tags here


HTML;
?>

不要回显 HTML。

如果你想用

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

你应该这么做:

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

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

<?php


print('
<div class="wrap">


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


</div>
')
?>
echo '
<html>
<body>
</body>
</html>
';

或者

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

我是这么做的:

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