PHP代码行中断`\ n`导致元素之间的差距

时间:2011-10-20 19:59:13

标签: php

我正在使用PHP回显一系列HTML元素。我使用\n导致代码换行符使源代码更有条理和清晰。

出于某种原因,在特定位置使用\n会导致HTML元素之间出现神秘的差距。在萤火虫中,这个差距并没有显示为边距或填充,而只是差距。

以下是有问题的PHP:

注意:正如您所看到的,我已经删除了标记内的所有PHP,因为我很确定它与此问题无关。

echo '<ul ... >'."\n";
while($row = mysql_fetch_assoc($result_pag_data)) {

    echo '<li><a ... >'."\n".
                '<img ... >'."\n".
          '</a></li>'."\n"; <---- THIS IS THE \n THAT SEEMS TO BE CAUSING THE GAP
}
echo '</ul>'."\n";  

你以前见过这样的事吗,与PHP换行相关的演示间隙? 如果是这样,那是什么原因?

我在代码中使用\n真的那么重要吗?

4 个答案:

答案 0 :(得分:3)

这是正常的。 \n换行符在HTML中没有意义,因此它被解释为空格字符。如果你不想要这个差距,那么删除\n,或者重写html,这样就不相关了:

<li><a ...><img ...></a></li>

作为一般规则,由于这个原因,可以包含文本的标签本身不应该在一行上关闭标签。


跟进你的“放置\ n”问题。这归结为个人偏好,但我倾向于格式化我的html:

<table>
<tr>
   <td><a href="some big long ugly url">
           <img ....></a></td>
</tr>

由于<tr>不能自己包含任何文本(在有效的html中),所以可以单独使用它。但是</a></td>都是可以包含文字的标签,因此我将它们放在“文本”的末尾(本例中为img标签),以便Phantom Linebreak Menance (即将到达你附近的星球大战)不能发动。

注意,当然,我的示例在开头<a><img>标记之间确实有换行符和缩进,因此这是另一个“必须紧挨着每个”的地方布局会造成差距。如果你需要一系列相互排列的东西,那么你基本上不能在页面的那一部分的任何地方使用换行符。

答案 1 :(得分:1)

将空格转换为(空)HTML文本节点,占用一些空间(您可以通过遍历DOM来测试)。除了首先从HTML中删除空格外,没有任何解决方案可以使这些消失。

当然,不只是\n会导致这种行为;空格或制表符也可以完全相同。

答案 2 :(得分:1)

在这种特殊情况下,换行符用于美化html源,通过view-source保持可读性。实际上这很常见。 (但多余。)

正如其他答案所说,它通常没有意义。虽然这可以通过CSS和属性覆盖(我们可以假设这不是这里的情况):

white-space: pre-line;

答案 3 :(得分:0)

您应该只输出一个新行,其中您实际上需要输出中的换行符。在HTML中,换行符是空格,就像空格字符一样。