16

我是一个相当有经验的 PHP 编码器,我只是想知道回显大块 HTML 代码的最佳方法是什么(最佳实践)。

这样做更好吗:

<?php
echo "<head>
<title>title</title>
<style></style>
</head>";
?>

或这个:

<?php
define("rn","\r\n");
echo "<head>".rn
."<title>title</title>".rn
."<style></style".rn
."</head>".rn;
?>

我倾向于使用第二个,因为它不会弄乱 php 源代码中的缩进。这是大多数人的做法吗?

4

9 回答 9

21

IMO,最好的方法通常是将 HTML 单独存储在模板文件中。这是一个通常包含 HTML 的文件,其中包含一些需要填写的字段。然后,您可以使用一些模板框架根据需要安全地填写 html 文档中的字段。

Smarty是一个流行的框架,这里有一个如何工作的例子(取自 Smarty 的速成课程)。

模板文件

<html>
<head>
<title>User Info</title>
</head>
<body>

User Information:<p>

Name: {$name}<br>
Address: {$address}<br>

</body>
</html>

将名称和地址插入模板文件的 PHP 代码:

include('Smarty.class.php');

// create object
$smarty = new Smarty;

// assign some content. This would typically come from
// a database or other source, but we'll use static
// values for the purpose of this example.
$smarty->assign('name', 'george smith');
$smarty->assign('address', '45th & Harris');

// display it
$smarty->display('index.tpl');

除了 Smarty 之外,还有许多合理的模板框架选择可以满足您的口味。有些很简单,许多具有一些相当复杂的功能。

于 2010-02-27T15:43:12.630 回答
16

您还可以将 HTML 放在 PHP 代码块之外:

<?php
    // PHP code
?>
<head>
<title>title</title>
<style></style>
</head>
<?php
    // further PHP code
?>
于 2010-02-27T15:44:10.967 回答
10

不要忘记您也可以访问 HEREDOC ( http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc )

echo <<< HERE
<head>
   <title>title</title>
   <style></style>
</head>
HERE;

另外,我会研究 Smarty 模板之类的东西——更重要的是 MVC 设计模式,它强制将标记与业务逻辑分离。

于 2010-02-27T15:42:57.593 回答
4

用户 heredoc 语法

echo <<<NO_MORE

<head>
<title>title</title>
<style></style>
</head>

NO_MORE;

或者直接从php输出html中转义?> ... <?php

于 2010-02-27T15:44:11.157 回答
4

我认为两者都不是最好的解决方案。回显 html 的可读性不是很高。我总是将 html 放在 php 标签之外。这样,您就可以得到缩进,并且它也更具可读性。

像这样的东西:

?>
<head>
    <title>title</title>
    <style></style>
</head>
<?php

如果你想更进一步,你可以使用模板系统来真正将逻辑与演示分开。

于 2010-02-27T15:44:48.300 回答
3

由于已经给出了足够的替代方案,我只想评论您的第二种方法。如果你想用 echo 来做,最好使用:

echo "<head>", PHP_EOL,
     "<title>title</title>", PHP_EOL
     "<style></style", PHP_EOL
     "</head>", PHP_EOL;

使用PHP_EOL而不是自定义常量不会在全局范围内乱扔多余的常量,并且还会使换行符独立于操作系统,因为它将使用为运行 PHP 的操作系统定义的内容。

使用逗号而不是连接可以节省一些内存,因为 PHP 根本不必连接,而只是刷新你在 echo 中抛出的任何内容。

于 2010-02-27T15:51:37.977 回答
1

这对我来说很好!

 <?php
     echo '
          <!DOCTYPE HTML>
          <html lang="en-US">
          <head>
              <meta charset="utf-8" />
              <link rel="stylesheet" type="text/css" href="styles.css" />
              <script type="text/javascript" src="js/jquery.js"></script>
              <script type="text/javascript" src="js/java.js"></script>
          </head>    
          <body>
              <div id="wrap">
                  <div id="main_home"></div>
                  <div id="nav_circle"></div>
                  <input type="text" id="search_text" value="Your search starts here">
              </div>
          </body>
          </html>
    ';
?>

您可以在 PHP 中回显大量这样的 HTML 代码。您必须确保 HTML 中没有 '。用“替换它,它会继续!

于 2013-04-02T19:56:07.893 回答
0

第一种形式更有效,因为它不执行字符串连接 ( .)。

于 2010-02-27T15:43:26.143 回答
0

如果您使用引号来显示 HTML,请使用单引号',因为 PHP 在双引号中搜索变量",这对于显示静态字符串不太适用。

对我来说,最好的方法仍然是 PHP 块之外的方法,有些人像其他人一样回答。

另外,不要忘记快捷方式。

于 2010-02-27T15:56:04.540 回答