簡體   English   中英

如何在 PHP 中回顯 HTML?

[英]How can I echo HTML in PHP?

我想有條件地輸出 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. 繼承人

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 以后的設置如何,它們都可用

像這樣嘗試( heredoc語法):

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

基本上你可以把 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 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 寫出來,抓住它,然后再寫一遍,這似乎很奇怪,但這確實意味着你可以做各種格式化的東西( heredoc等),並且測試它的輸出是否正確,而不會出現頁面的麻煩模板妨礙了。 (順便說一句, Joomla CMS就是這樣做的。)

IE:

<?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
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

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

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

<?php

  print('
    <div class="wrap">

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

    </div>
  ')
?>

除了Chris B 的回答,如果您無論如何都需要使用echo ,仍然希望保持簡單和結構化,並且不想用<?php stuff; ?>向代碼發送垃圾郵件<?php stuff; ?> <?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比連接更有效。

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

或者

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

嘗試這個:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>

不要回顯 HTML。

如果你想使用

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

你應該這樣做:

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

這就是我的做法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM