PHP换行符\n和\r\n无法正常工作

12
  $rows = mysql_num_rows($result) ;
  for ($j=0 ; $j < 3 ; $j++) {
  for ($i=0 ; $i < 3 ; $i++) {
    $row = mysql_fetch_array($result) ;
    echo '<a href="image2.php?id='.$row['ID'].'">'."<img src='".$row['Image']."' />".'</a>' ;

  }
   echo "\r\n";
  }

这段代码展示了三组三张图片。我原以为 \r\n 和 \n (双引号)会创建一个新的行。然而实际上它只是在图片之间插入了一个空格。我是错误地使用了 \r\n 还是使用了错误的代码来插入一个新行(换行符)呢?

示例(#代表一张图片):

没有使用 echo \r\n: ######### 使用 echo \r\n: ### ### ###


如果你制作HTML页面,应该使用<br>标签;如果是控制台应用程序,则应使用PHP_EOL - rdo
4个回答

13

1
应该使用<br />而不是<br>,以符合有效的xml标准,因为br必须是自闭合标签。 - devsnd
另外,查看源代码(在大多数浏览器中为ctrl+u),可以在那里看到换行符。 - giorgio
2
@twall: 你知道为什么它必须是有效的XML吗?答案:实际上并不需要,除非你使用XML内容类型(没有人使用);那些已经修复了标记的人,因为用户代理否则根本无法显示页面。<br>是有效的HTML4和HTML5。 - Jon
1
@Jon...嗯,既然OP已经关闭了他们的<img />标签,那么假设他们也想关闭他们的<br />标签是有道理的。我倾向于关闭所有标签-我发现这比尝试记住例外要容易得多。 - CD001
@CD001:我也这样做(在不知道更好的方法时养成了这个习惯),但我的观点是它完全没有提供任何东西,所以我们可以自己做一个好处,每个这样的标签少打两个字符。 - Jon
@Jon - 哈哈,非常正确 - 更不用说保存所有的 </p> 了,如果我没记错的话,它们也是可选的 :) - CD001

12

您的echo "\r\n";语句在循环外部。请将其移动到循环内部。

此外,如果您想在浏览器中显示换行符,则应该同时打印一个<br />标签。

  $rows = mysql_num_rows($result) ;
  for ($j=0 ; $j < 3 ; $j++) {
  for ($i=0 ; $i < 3 ; $i++) {
    $row = mysql_fetch_array($result) ;
    echo '<a href="image2.php?id='.$row['ID'].'">'."<img src='".$row['Image']."' />".'</a>' ;
  }
    echo "<br />\n";    
  }

刚试了一下这个方法,它可行。不知道你是否误读了我的问题,但当前的位置是正确的。感谢你的帮助。 - Dan1676
刚刚修复了代码并将 echo 移回原来的位置。 - Nadh

5

您需要:

echo '<br />';

替代方式:

echo "\r\n";

答案是正确的,但为其他人提供一些澄清会更好。 - user443346

1
你可以考虑设置适当的标题 例如:

$data = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
];
header("Content-Type: text/plain");
foreach($data as $row){
    echo implode(',', $row) . "\r\n";
}


如果您不能使用 <br> 标签,而在浏览器中无法呈现换行符 "\r\n",那么这就是正确的解决方案。 - mnewelski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接