【问题标题】:Is there a way to force a new line after php closing tag ?> when embedded among html?有没有办法在 php 结束标记之后强制换行?> 当嵌入到 html 中时?
【发布时间】:2010-12-26 20:41:40
【问题描述】:

我一直在网上搜索一种方法,但收效甚微,可以强制 php 在关闭 php 标记 ?> 之后输出换行符,这样我的 HTML 将在 PHP 解析之前呈现为我看到的样子,这样它看起来查看页面的html源代码时整洁。

我想阻止它删除换行符并导致下一行结束并因此破坏页面的格式。是否可以更改特定的 php.ini 设置以禁用此行为?

我所有的代码逻辑文件都从它们的末尾删除了?>,所以我不必担心它们会注入额外的换行符,这就是为什么我相信 PHP 被编码为去除尾随的换行符。

【问题讨论】:

  • 你能发布一个你所指的快速例子吗?
  • w...t...? HTML 忽略新行和任何空白。我不确定您到底在说什么,但是如果您想在新行上显示文本,则必须使用标准的 html 格式,例如将内容放在

    中,或者至少添加一个
    之后。

  • 对不起,如果我的描述不清楚。我的问题不在于浏览器在新行上呈现内容,而是当您查看页面源时,新行不存在。根据 Derek 的代码示例。 HTML 完全没问题/通过了所有标准的验证检查。我只是喜欢我的代码整齐地缩进等等...... PHP的结束标签有点破坏了。
  • 感谢您提出这个问题;实际上,我遇到了完全相同的问题,PHP 在结束 ?> 标记后删除换行符 - 与 html 不同,当使用 mail() 标头去除换行符时。

标签: php configuration code-formatting


【解决方案1】:

理查德是这样说的:

Hello <? ?>
Jello

...PHP解析后变成这样:

 Hello Jello


我只是手动添加一个额外的换行符,如下所示:

Hello <? ?>

Jello

...给出这个:

Hello
Jello

【讨论】:

  • 非常简单的解释和插图。我完全听不懂他在说什么。
  • 我想我会把它留在那种情况下。我不想在我的页面模板上到处都是额外的行空间。我只是想在配置文件中检查一下 PHP 的这种行为是否无法规避
  • 我仍然不清楚你想要什么。我从来没有让&lt;div&gt;...&lt;/div&gt; &lt;?php ... ?&gt; &lt;p&gt;...&lt;/p&gt; 变成&lt;div&gt;...&lt;/div&gt; &lt;p&gt;...&lt;/p&gt;。它将在您键入时呈现源代码,因此有一个换行符就会有一个换行符,没有换行符就没有。 挠头???
  • 如果你为一个表格写了一些格式整齐的 html
    在 php 文件中,然后将 table、tr、td 和 行将换行到您的 php 变量被回显的行。因此,您的 与开始
    标记不整齐对齐,因为它是你编码它的时候(并且 PHP 解析器没有处理它)
  • 是的,真的要做很多工作......我希望它可能像 remove_new_lines_after_closing_tag = off 这样的 php.ini 设置一样简单
【解决方案2】:

这是一个老问题,但要保留新行,只需在结束标记后放置一个空格。

来源:http://php.net/manual/en/language.basic-syntax.instruction-separation.php

【讨论】:

  • 这没有回答问题
  • 这确实可以正常工作,但感觉有点hacky。这是否在任何地方正确记录?
  • 忘了提到引用在上面链接的用户 cmets 中。这是我在该功能上找到的最具体的文档。
【解决方案3】:

没有办法改变这种行为。为了弄清楚发生了什么,我总是将换行符明确地放在我的模板文件中。

Hello,    

Foo: <?php echo $foo."\n"; ?>
Bar: <?php echo $foo."\n"; ?>

This concludes foo and bar.

输出:

Hello,    

Foo: foo
Bar: bar

This concludes foo and bar.

【讨论】:

    【解决方案4】:

    你可以试试这个:

    echo "output \n";
    

    甚至是这种不太优雅的技术:

    echo "output
    ";
    

    请粘贴一些示例代码 sn-p 以获得更具体的帮助。

    【讨论】:

      【解决方案5】:

      你不能总是在 php 标签之后开始一个块级元素。

      有时,您会在文本区域内生成纯文本。

      其他时候,您根本不会生成 HTML 字符串。

      • SQL 语句
      • 电子邮件正文
      • 其他非 HTML 字符串

      【讨论】:

      • 这是错误的。 op 不是要求添加额外的换行符,而是要求保留源中现有的换行符(php 的当前行为是在执行期间删除现有的换行符)
      【解决方案6】:

      我的强迫性习惯驱使我实现类似的目标。可悲的是,对此没有优雅的解决方案。两个建议:

      1. 在您想要中断 HTML 代码的位置输出一个换行符,如下所示:

        echo 'Hello World'.chr(10);

      2. PHP 的 'echo' 命令不是一个实际的函数,所以你不能覆盖它;但是,您可以创建一个包装器并使用它来代替:

        function myecho($string, $newline=true)
        {
           echo $string;
           if($newline)
              echo chr(10);
        }
        

      这两种解决方案都不优雅,但话又说回来,如果不添加换行符,HTML 输出也不是。

      【讨论】:

        【解决方案7】:

        如果这给您带来了问题,那么您很可能没有编写好的 HTML。如果您将 PHP 从 HTML 中分离出来,那么在 ?&gt; 关闭标记之后,只需从块级 HTML 元素开始。

        像这样:

        Hello <?php $php_code(); ?> <div>Something else here</div> or even <p>Something else here</p>
        

        哪个会输出:

        Hello
        
        Something else here
        

        如果你写的是:

        Hello <?php $php_code(); ?> Something else here
        

        那么你的问题在于你如何编写 HTML,而不是 PHP 解析。

        【讨论】:

        • 它的源代码像您发布的第一个代码示例一样出现,我试图避免。我希望(ed)将 div 和 p 标签放在新行上,并根据它们在 DOM 中出现的级别正确缩进。 IE。 在 标签下方缩进 1 个选项卡等...
        猜你喜欢
        相关资源
        最近更新 更多
        热门标签