77

我有一个 PHP 函数,用于输出标准的 HTML 块。它目前看起来像这样:

<?php function TestBlockHTML ($replStr) { ?>
    <html>
    <body><h1> <?php echo ($replStr) ?> </h1>
    </html>
<?php } ?>

我想返回(而不是回显)函数内的 HTML。有什么方法可以做到这一点,而无需在字符串中构建 HTML(上图)?

4

8 回答 8

108

您可以使用heredoc,它支持变量插值,使其看起来相当整洁:

function TestBlockHTML ($replStr) {
return <<<HTML
    <html>
    <body><h1>{$replStr}</h1>
    </body>
    </html>
HTML;
}

请密切注意手册中的警告 - 结束行不能包含任何空格,因此不能缩进。

于 2009-02-09T15:02:13.773 回答
85

是的,有:您可以echo使用以下方法捕获编辑文本ob_start

<?php function TestBlockHTML($replStr) {
    ob_start(); ?>
    <html>
    <body><h1><?php echo($replStr) ?></h1>
    </html>
<?php
    return ob_get_clean();
} ?>
于 2009-02-09T14:55:23.573 回答
18

这可能是一个粗略的解决方案,如果有人指出这是否是一个坏主意,我将不胜感激,因为它不是函数的标准使用。我在没有将返回值构建为字符串的情况下从 PHP 函数中获得了一些成功,其中包含以下内容:

function noStrings() {
    echo ''?>
        <div>[Whatever HTML you want]</div>
    <?php;
}

只是'调用'函数:

noStrings();

它会输出:

<div>[Whatever HTML you want]</div>

使用此方法,您还可以在函数中定义 PHP 变量,并在 HTML 中回显它们。

于 2011-11-13T00:23:13.517 回答
9

创建模板文件并使用模板引擎读取/更新文件。它将增加您的代码在未来的可维护性以及将显示与逻辑分开。

使用Smarty的示例:

模板文件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>{$title}</title></head>
<body>{$string}</body>
</html>

代码

function TestBlockHTML(){
  $smarty = new Smarty();
  $smarty->assign('title', 'My Title');
  $smarty->assign('string', $replStr);
  return $smarty->render('template.tpl');
}
于 2009-02-09T15:32:21.550 回答
5

另一种方法是使用file_get_contents()并拥有一个模板 HTML 页面

模板页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>$title</title></head>
<body>$content</body>
</html>

PHP 函数

function YOURFUNCTIONNAME($url){

$html_string = file_get_contents($url);
return $html_string;

}
于 2014-02-28T18:38:59.143 回答
1

如果您不想依赖第三方工具,您可以使用此技术:

function TestBlockHTML($replStr){
  $template = 
   '<html>
     <body>
       <h1>$str</h1>
     </body>
   </html>';
 return strtr($template, array( '$str' => $replStr));
}
于 2018-06-16T22:23:54.010 回答
0

或者你可以使用这个:

<?
function TestHtml() { 
# PUT HERE YOU PHP CODE
?>
<!-- HTML HERE -->

<? } ?>

要从此函数获取内容,请使用:

<?= file_get_contents(TestHtml()); ?>

就是这样 :)

于 2018-06-11T18:35:01.643 回答
0

模板文件

<h1>{title}</h1>
<div>{username}</div>

PHP

if (($text = file_get_contents("file.html")) === false) {
    $text = "";
}

$text = str_replace("{title}", "Title Here", $text);
$text = str_replace("{username}", "Username Here", $text);

然后您可以将 $text 回显为字符串

于 2020-06-13T05:57:42.740 回答