PHP换行符(\n)无法正常工作

37
由于某种原因,我无法在使用 PHP 将输出写入文件时使用 \n 创建换行。它只会将 "\n" 写入文件。我已经尝试过使用 "\\n",这样它就会按预期地写入"\n",但是我无论如何都无法弄清为什么在我的字符串中添加 \n 不会创建新的行。我还尝试了使用 \r\n,但它只是将 "\r\n" 添加到文件中的行末。
例子:
error_log('test\n', 3, 'error.log');
error_log('test2\n', 3, 'error.log');

输出:

test\ntest2\n

在Mac OSX上使用MAMP(如果有关系的话,可能是某种PHP配置问题)。

有什么建议吗?

11个回答

62

使用单引号不会将值更改为实体,因此您必须使用双引号!+1 - RobertPitt
8
你怎么能在不到两分钟的时间内给出如此完整的回答呢?这就是我单纯阅读问题所需的时间!:o - cregox

29

\n并不是为了让最终用户看到一个新行,你必须使用html的<br/>元素来实现。 \n只影响php生成的html在网页源代码中的显示方式。如果您打开网页并点击“查看源代码”,您将看到由php生成的html作为一行长字符串显示。这不美观。这就是\n的作用将php生成的html分成较短的行。\n的目的是使“查看源代码”页面更美观。


1
为什么它会针对“查看源代码”页面而不是网页输出? - Istiaque Ahmed
@IstiaqueAhmed 因为它不会在网页源代码中生成HTML代码,所以会受到影响。 - SAYE

15
当您在浏览器中运行PHP脚本时,默认情况下它将呈现为HTML。如果您使用的书籍显示不同,则代码或插图可能不准确。您可以使用“查看源代码”来查看发送到浏览器的内容,您会发现换行符号是存在的。
<?php
echo "Line 1\nLine 2";
?>

这将在您的浏览器中呈现为:

Line 1 Line 2

如果您需要向浏览器发送纯文本,可以使用类似以下的内容:

<?php
header('Content-type: text/plain');
echo "Line 1\nLine 2";
?>

这将输出:

Line 1
Line 2

7

nl2br()函数用于创建新行。

echo nl2br("Welcome\r\n This is my HTML document", false);

上面的例子将输出:
欢迎
这是我的HTML文档

6

我很确定你正在输出到一个HTML文件。 问题是HTML在源代码中忽略换行符,这意味着如果你想要在生成的页面显示中有一个换行符,你必须用<br/>替换换行符。


4

您需要使用双引号。双引号具有更多的转义字符。

error_log("test\n", 3, 'error.log');
error_log("test2\n", 3, 'error.log');

3
为了将\n放在双引号中,请尝试:
$LOG = str_replace('\n', "\n", $LOG);

2

这是因为您使用了单引号(')。请改用双引号(")。' 会让PHP直接使用引号之间的内容。


2

你需要用双引号。单引号会忽略 \ 转义符。双引号还可以为你评估变量表达式。

请查看php手册中的这个页面以获取更多信息。


1

在HTML和浏览器中,“\n”或“\r”等标签被视为空格。您可以使用“pre”标签来解决这个问题。

<?php
    echo "<pre>";
    echo "line1 \n some text \t a tab \r some other content";
    echo "</pre>";
?>

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