[英]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。
<?php if(condition){ ?>
<!-- HTML here -->
<?php } ?>
if(condition){
echo "HTML here";
}
使用回顯,如果您希望在 HTML 中使用雙引號,則必須使用單引號回顯,如下所示:
echo '<input type="text">';
或者你可以像這樣逃避它們:
echo "<input type=\"text\">";
模板引擎用於在主要包含 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.