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


评论

\ n在html中不起作用。我猜你的意思是echo“
”;

好主意是要从逻辑上分离您的逻辑(例如在MVC中)。使用Twig之类的Templetig引擎将您的视图与脚本逻辑分开-twig.sensiolabs.org旨在将您的html标记实现到您的php脚本中,请以其他方式进行操作。实现php变量,以树枝寺庙。一旦您理解了我的意思,您就会看到这种方法的好处。嫩枝解决了这类问题。对于少量的代码,您可以编写自己的细枝扩展,然后将其扩展使用,以执行一些复杂但重复的任务。

可能如何与javascript或html函数一起使用php echo?还是带有document.write的php和html?

#1 楼

有几种方法可以在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?>)。
还有其他模板引擎(例如Smarty,Twig等)使语法更加简洁(例如{{someVariable}})。
使用模板引擎的主要好处是将设计(表示逻辑)与编码(业务逻辑)分开。从长远来看,这也使代码更简洁,更易于维护。
如果您还有其他问题,请随时发表评论。
PHP文档中的这些内容都可以进一步阅读。
/>
注意:不鼓励使用PHP短标签<??>,因为它们只有在通过short_open_tag php.ini配置文件指令启用或通过--enable-short-tags选项配置了PHP后才可用。无论从5.4版开始如何设置,它们均可用。

评论


“ / * HTML here * /”真的不应该是“ <!-HTML here->”吗? ;)

–杰里米·洛根(Jeremy Logan)
09年7月8日在20:50

是的,在第一篇文章中,您是正确的。我陷入了代码哈哈。谢谢。

–克里斯·比尔(Chris Bier)
09年7月8日21:00

谢谢@克里斯·B。它帮助了我。对于回声,如果您希望在HTML中使用双引号,则必须使用单引号回声,如下所示:我实际上错过了这一点。

–阿尤什·米什拉(Ayush Mishra)
2013年1月2日,9:13

答案中的第一个链接现已删除:(

–mcon
15年8月20日在15:58



实际上,从5.4开始,唯一可用的短标签就是短回显标签<?= $ var?>。通常不鼓励使用短标签,并将其删除(<?doStuff()?>)。

–igorsantos07
2015年10月11日17:26

#2 楼

像这样尝试(heredoc语法):
$variable = <<<XYZ
<html>
<body>

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


评论


@MhdSyrwan只是随机字符,您可以在这里阅读更多信息php.net/manual/en/…

–lfx
2011-09-23 18:22

想详细说明吗?我没有看到打开或关闭PHP括号,但是同时看到了HTML和PHP,是吗? -链接可以正常工作并更好地回答,但是也许应该在答案文本中,而不是注释中?

– Julix
17年5月14日在20:06



@Julix当然,您需要添加PHP标记的开始和结束。他只是想简单地举例说明。

–法米
18年1月10日在10:07

我知道了;我以某种方式错过了这是heredocs语法(即整个代码是php)。我感到困惑,因为那时我还不熟悉PHP,并且习惯于看到<?php $ variable =“ bla”;这样的语法。 ?> ”> ---所以我以为缺少一堆括号,不确定它们到底在哪里。当我回答稍老的评论时,总是很有趣,因为那时我还很陌生。

– Julix
18年1月11日,18:50



#3 楼

您可以将替代语法用于控制结构并突破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; ?>


评论


@杰里米:这可能是最好,最直接的方法,前提是您不想再找其他东西了。

–坦率的V
09年7月8日在20:30

是的,特别是在HTML之间使用PHP注释的能力,这些注释不会被回显。

–罗宾·罗德里克斯(Robin Rodricks)
09年7月8日在20:33

#4 楼

基本上,您可以将HTML放置在PHP标记之外的任何位置。在显示任何数据之前进行所有必要的数据处理也非常有益,以便将逻辑和表示分开。

数据显示本身可以在同一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; ?>而不是<?=$var?>取决于您的PHP设置。

#5 楼

我偏爱这种样式:

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


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

评论


ASP标记与PHP 4+兼容吗?

–罗宾·罗德里克斯(Robin Rodricks)
09年7月8日在20:35

是的,但是在它们持续使用时得到了它们-它们已从PHP中删除(不确定哪个版本,如果尚未使用)

–格雷格
09年7月8日在20:44

#6 楼

在这种情况下,另一种方法是将HTML放在单独的文件中,并用占位符[[content]]标记要更改的区域。 (您也可以使用sprintf而不是str_replace。)或者,您可以将所有PHP内容输出到缓冲区中捕获的屏幕上,编写HTML,然后将PHP输出放回页面。
写出PHP,捕获它,然后再次写它似乎很奇怪,但这确实意味着您可以进行各种格式的设置(例如Heredoc等),并测试其输出。正确地处理页面模板的麻烦。 (顺便说一下,Joomla CMS就是这样做的。)
即:
$page = 'Hello, World!';
$content = file_get_contents('html/welcome.html');
$pagecontent = str_replace('[[content]]', $content, $page);
echo($pagecontent);


#7 楼

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

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


#8 楼

只需使用print函数在PHP文件中回显文本,如下所示:
<?php

  print('
    <div class="wrap">

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

    </div>
  ')
?>


#9 楼

除了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采用多个参数,因此缩进效果很好。同样,将echo与参数一起使用比串联更有效。

#10 楼

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




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


#11 楼

试试这个:
 <?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>
 


#12 楼

不要回显HTML。
如果要使用
<?php echo "<h1>  $title; </h1>"; ?>

,您应该这样做:
<h1><?= $title;?></h1>


#13 楼

这是我的方法:
<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>


评论


不知道为什么有人在同一线程中写下几乎相同的答案并获得30票赞成时,为什么您的答案被特别否决了。不过,这是完全有效的语法。有时堆栈溢出毫无意义...

–朋友
8月12日4:46