我怎样才能在PHP中回显HTML?

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

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开始的设置,它们都可用 。

尝试像这样:

 $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 is a bit of a pain to write */ ?> <?php else: ?> <!-- else --> <?php endif; ?> 

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

数据显示本身可能位于同一个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 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写出来,抓住它,然后重新写一遍可能看起来很奇怪,但是这意味着你可以做各种格式化的东西(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 

除了Chris B的回答,如果你仍然需要使用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比连接更有效。

试试这可能会帮助你…….

 <?php echo <<<HTML your html tags here HTML; ?> 

$ enter_string = '实施例'; echo('echo as HTML'.htmlspecialchars((string)$ enter_string));

不要回显HTML

如果你想使用

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

你应该这样做:

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