我想有条件地输出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。
<?php if(condition){ ?>
<!-- HTML here -->
<?php } ?>
if(condition){
echo "HTML here";
}
使用echos,如果您希望在HTML中使用双引号,则必须使用单引号回声,如下所示:
echo '<input type="text">';
或者你可以像这样逃避它们:
echo "<input type=\"text\">";
模板引擎用于在主要包含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。
不要回应HTML
如果你想使用
<?php echo "<h1> $title; </h1>"; ?>
你应该这样做:
<h1><?= $title;?></h1>
只需使用print函数来回显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";
试试这样:
$variable = <<<XYZ
<html>
<body>
</body>
</html>
XYZ;
echo $variable;
你可以使用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; ?>
基本上你可以把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?>
。
我偏爱这种风格:
<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写出来,抓住它然后再写一遍可能看起来很奇怪,但它确实意味着你可以做各种格式化的东西(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
试试这个可以帮助你.......
<?php
echo <<<HTML
your html tags here
HTML;
?>
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';
echo( 'Echo as HTML' . htmlspecialchars( (string)$enter_string ) );
除了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
也比连接更有效。