如何在 PHP 中回显 HTML?

Posted

技术标签:

【中文标题】如何在 PHP 中回显 HTML?【英文标题】:How can I echo HTML in PHP? 【发布时间】:2010-11-09 04:16:53 【问题描述】:

我想有条件地输出 html 以生成页面,那么在 php 4+ 中回显 HTML 的多行 sn-ps 最简单的方法是什么?我需要使用 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";

【问题讨论】:

\n 在 html 中不起作用。我猜你的意思是 echo ""; 好的做法是把你的逻辑从视图中分离出来(就像在 MVC 中一样)。使用 Twig 之类的 Templetig 引擎将您的视图与脚本逻辑分开 - twig.sensiolabs.org Insted 将您的 html 标记实施到您的 php 脚本中,反之亦然。实现 php 变量到树枝寺庙。一旦你明白我的意思,你就会看到这种方法的好处。 Twig 解决了这类问题。对于一小段代码,您可以编写自己的 twig 扩展,然后您可以在几秒钟内使用它来执行一些复杂但重复的任务。 【参考方案1】:

这就是我的做法:

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

【讨论】:

不知道为什么当有人在同一个线程中写了几乎相同的答案并获得 30 个赞成票时,为什么您的答案被特别反对。这是完全有效的语法。堆栈溢出有时毫无意义...... 我同意。可能是 ($contition == true) 不受欢迎。最好,你会改为 ($contition)(sic)【参考方案2】:

不要回显 HTML。

如果你想使用

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

你应该这样做:

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

【讨论】:

这是一个非常自以为是的观点。您完全可以毫无问题地回显 HTML。【参考方案3】:

试试这个:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>

【讨论】:

【参考方案4】:
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

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

【讨论】:

【参考方案5】:

只需使用print函数在PHP文件中回显文本如下:

<?php

  print('
    <div class="wrap">

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

    </div>
  ')
?>

【讨论】:

【参考方案6】:

另一种方法是将 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 等),并在没有页面模板的麻烦。 (JoomlaCMS 就是这样做的,顺便说一句。)

即:

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

【讨论】:

【参考方案7】:

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

【讨论】:

@Jeremy:这可能是最好、最直接的方式,前提是您没有在寻找更多……您在寻找更多吗? 是的,特别是在 HTML 之间使用 PHP cmets 的能力,不会被回显的 cmets。【参考方案8】:

这样试试(heredoc 语法):

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

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

【讨论】:

@MhdSyrwan 只是随机字符,您可以在此处阅读更多内容php.net/manual/en/… 想详细说明一下?我看不到 PHP 括号的开始或结束,但 HTML 和 PHP 都有,是吗? - 链接可以工作并更好地回答它,但也许它应该在答案文本中,而不是在 cmets 中? @Julix 当然你需要添加 PHP 的开始标签和 (depends) 结束标签。他只是想让这个例子简短一些。 我明白了;不知何故,我错过了这是 heredocs 语法(即整个代码是 php)。我很困惑,因为当时我是 PHP 新手,并且习惯于看到像 &lt;?php $variable = "bla"; ?&gt; &lt;html&gt; &lt;body class="&lt;?php echo $variable ?&gt;"&gt; &lt;/body&gt; &lt;/html&gt; 这样的语法 --- 所以我认为缺少一堆括号并且不确定它们到底会去哪里。当我年纪稍大的 cmets 得到回答时,总是很有趣,因为那时我对这一切都很陌生。【参考方案9】:

有几种方法可以在 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 你可以使用短标签之类的东西来回显变量(例如&lt;?=$someVariable?&gt;)。

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

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

如果您还有其他问题,请随时发表评论。

在PHP documentation 中可以进一步阅读这些内容。


注意: 不鼓励使用 PHP 短标签 &lt;??&gt;,因为它们只有在使用 short_open_tag php.ini 配置文件指令启用时才可用,或者如果 PHP 配置了 @ 987654335@ 选项。 They are available, regardless of settings from 5.4 onwards.

【讨论】:

不应该是 "/* HTML here */" 真的是 "" 吗? ;) 在第一篇文章中是的,您是正确的。我被代码迷住了哈哈。谢谢。 谢谢,@Chris B. 它帮助了我。对于回显,如果您希望在 HTML 中使用双引号,则必须使用单引号回显,如下所示:我实际上错过了这个。 答案中的第一个link 现在已被删除:( 实际上,从 5.4 开始,唯一可用的短标签是短回显标签 &lt;?=$var?&gt;。像往常一样不鼓励使用短标签,并将其删除 (&lt;? doStuff() ?&gt;)。【参考方案10】:
echo '
<html>
<body>
</body>
</html>
';

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

【讨论】:

【参考方案11】:

除了Chris B's的答案,如果你无论如何都需要使用echo,仍然希望保持简单和结构化并且不想用&lt;?php stuff; ?&gt;的代码发送垃圾邮件,你可以使用语法下面。

例如,您要显示画廊的图像:

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'], '" ',
                '',
            '>',
        '</a>',
    '</li>';

Echo 接受多个参数,因此缩进效果很好。同样使用带参数的echo 比串联更有效。

【讨论】:

【参考方案12】:

基本上,您可以将 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>

注意:您可能需要使用 &lt;?php echo $var; ?&gt; 而不是 &lt;?=$var?&gt;,具体取决于您的 PHP 设置。

【讨论】:

【参考方案13】:

我偏爱这种风格:

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

我确实使用 ASP 风格的标签,是的。 PHP 和 HTML 的混合在我看来是超级可读的。诀窍是让&lt;%%&gt; 标记恰到好处。

【讨论】:

ASP 标签与 PHP 4+ 兼容吗? 是的,但在它们持续存在时获取它们 - 它们正在从 PHP 中删除(不确定哪个版本......如果它们还没有删除)

以上是关于如何在 PHP 中回显 HTML?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中回显 XML 文件

如何在 PHP 中回显或打印数组?

如何在 PHP 中回显此 SimpleXMLElement 中的 OK 属性? [复制]

如何在 PHP 中回显 JSON [关闭]

如何在 PHP 中回显可点击的 URL?

如何使用视图在 php 中回显当前 Laravel 版本的版本?