在 PHP 中格式化长 HTML 字符串的最佳方法是什么?

发布于 2024-08-25 14:44:54 字数 450 浏览 5 评论 0 原文

我知道这确实是一个主观问题,但为了最佳实践(和可读性),我似乎无法找到格式化长 HTML 字符串的最佳方法。我通常这样做:

echo '
<div>
    <p>Content Inside</p>
    <div class="subbox">
        <ul>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
        </ul>
    </div>
</div>
';

但我仍然不喜欢结果,特别是如果它出现在一大段代码的中间。就是感觉很乱。

I know it's really a subjective question, but for best-practices (and readability), I can't seem to get a fix on the best way to format long strings of HTML. I typically do it like this:

echo '
<div>
    <p>Content Inside</p>
    <div class="subbox">
        <ul>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
        </ul>
    </div>
</div>
';

But I still don't like the outcome, especially if this appears in the middle of a large block of code. It just feels messy.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

花开雨落又逢春i 2024-09-01 14:44:55

我更喜欢像 Code Igniter 这样的 MVC 架构,用于将表示与逻辑分离。基本上,所有模板都是单独存储的,并且使用 描述的 PHP 备用语法结构在这里设置您的 HTML 格式。

I prefer an MVC architecture like Code Igniter for separating presentation from logic. Basically, all your templates are stored separately and you use the PHP alternate syntax structures described here to format your HTML.

水染的天色ゝ 2024-09-01 14:44:55

最好的方法是使用模板系统,您可以将逻辑与表示分离。在模板中你只有这样的东西:

<html>
<body>

<h1><?php echo $title; ?></h1>
<p><?php echo $myparagraph; ?></p>

</body>
</html>

The best way is to use a templating system where you can separate your logic from presentation. In the template you'd only have stuff like:

<html>
<body>

<h1><?php echo $title; ?></h1>
<p><?php echo $myparagraph; ?></p>

</body>
</html>
兲鉂ぱ嘚淚 2024-09-01 14:44:54

你可以跳出 PHP 并直接输入 HTML:

<?php $var = "foo"; ?>
<div>
  <ul>
    <li>Foo</li>
  </ul>
</div>
<?php $foo = "var"; ?>

如果你所做的只是一个 echo/print,我认为这会干净得多。此外,您不需要在 HTML 本身中遍历和转义单/双引号。

如果需要将 HTML 存储在变量中,可以使用 HEREDOC

$str = <<<EOD
<div>
  <ul>
    <li>Foo</li>
  </ul>
</div>
EOD;

You can jump out of PHP and input HTML directly:

<?php $var = "foo"; ?>
<div>
  <ul>
    <li>Foo</li>
  </ul>
</div>
<?php $foo = "var"; ?>

If all you're doing is an echo/print, I think this is much cleaner. Furthermore, you don't need to run through and escape single/double quotes within the HTML itself.

If you need to store the HTML in a variable, you could use HEREDOC:

$str = <<<EOD
<div>
  <ul>
    <li>Foo</li>
  </ul>
</div>
EOD;
牵你的手,一向走下去 2024-09-01 14:44:54

为什么不直接将 PHP 嵌入到 HTML 中呢?这就是 PHP 最初设计的工作原理。

// PHP goes here
?>
<div>
    <p>Content Inside</p>
    <div class="subbox">
        <ul>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
        </ul>
    </div>
</div>
<?php
// More PHP here

Why not just embed your PHP in the HTML? That's how PHP was originally designed to work.

// PHP goes here
?>
<div>
    <p>Content Inside</p>
    <div class="subbox">
        <ul>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
        </ul>
    </div>
</div>
<?php
// More PHP here
路还长,别太狂 2024-09-01 14:44:54

老派 Perl 风格 heredoc 也可以:

echo <<<EOL
<div>
    <p>Content Inside</p>
    <div class="subbox">
        <ul>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
        </ul>
    </div>
</div>
EOL;

使用多个 块更干净,但是如果您在类定义或其他内容中,则定界符可能不那么尴尬(尽管从类打印 HTML定义只不过是尴尬的)。

Old school Perl-style heredoc works too:

echo <<<EOL
<div>
    <p>Content Inside</p>
    <div class="subbox">
        <ul>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
        </ul>
    </div>
</div>
EOL;

Using multiple <?php ?> blocks is cleaner, but if you're in a class definition or something, a heredoc might be less awkward (though printing HTML from a class definition is nothing but awkward).

森林散布 2024-09-01 14:44:54

我会这样做:

echo '<div>
         <p>Content Inside</p>
         <div class="subbox">
             <ul>
                 <li>etc.</li>
                 <li>etc.</li>
                 <li>etc.</li>
                 <li>etc.</li>
            </ul>
         </div>
      </div>';

I would do it like this:

echo '<div>
         <p>Content Inside</p>
         <div class="subbox">
             <ul>
                 <li>etc.</li>
                 <li>etc.</li>
                 <li>etc.</li>
                 <li>etc.</li>
            </ul>
         </div>
      </div>';
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文