455

在 PHP 中,我试图创建一个换行符:

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo '\r\n';

然后我在记事本中打开创建的文件,它按字面意思写换行符:

1 个 John Doe\r\n 1 个 John Doe\r\n 1 个 John Doe\r\n

我已经尝试了许多变体\r\n,但没有一个工作。为什么换行符不变成换行符?

4

15 回答 15

720

只有双引号字符串将转义序列解释为 '0x0D'\r\n'0x0A' 分别,所以你想要:

"\r\n"

另一方面,单引号字符串\\只知道转义序列和\'.

因此,除非您将单引号字符串与其他地方生成的换行符连接起来(例如,使用双引号字符串"\r\n"或使用chrfunction chr(0x0D).chr(0x0A)),否则在单引号字符串中换行的唯一其他方法是使用编辑器逐字输入:

$s = 'some text before the line break
some text after';

\r\n如果您需要一些特定的字符序列(例如),请务必检查您的编辑器的换行设置。

于 2010-11-21T14:48:21.617 回答
263

使用预定义的PHP_EOL常量:

echo $clientid, ' ', $lastname, PHP_EOL;

常量值将根据 PHP 正在执行的操作系统的行尾设置。在 Linux 上,它将是"\n";在 Windows 上,它将是"\r\n".

于 2010-11-21T14:50:36.750 回答
105

PHP 中的“echo”命令将输出作为原始 html 发送到浏览器,因此即使使用双引号,浏览器也不会将其解析为两行,因为 HTML 中的换行符没有任何意义。这就是为什么您需要使用:

echo [output text]."<br>";

使用“echo”时,或者改为使用 fwrite...

fwrite([output text]."\n");

这将输出 HTML 换行符代替“\n”。

于 2013-12-23T18:50:24.923 回答
52

无论平台如何,都使用常量 PHP_EOL 来获取正确的字符。

http://us3.php.net/manual/en/reserved.constants.php

一个简单的使用示例:

<?php
$data = 'First line' . PHP_EOL .
        'Second line' . PHP_EOL .
        'Third line';

file_put_contents("filename.txt", $data);
?>
于 2015-01-04T06:00:17.253 回答
24

双引号之间的字符串""插入,这意味着它们将转义字符转换为可打印字符。

单引号之间的字符串''是文字,这意味着它们被完全按照输入的字符对待。

您可以将两者放在同一行:

echo '$clientid $lastname ' . "\r\n";
echo "$clientid $lastname \r\n";

输出:

$clientid $lastname
1 John Doe
于 2012-11-21T20:07:40.837 回答
16

你应该使用这个:

"\n"

您可能还想看看PHP EOL

于 2010-11-21T14:49:50.423 回答
14

实际上\r\n是用于输出的 html 端。使用这些字符,您可以在 html 代码中创建一个换行符以使其更具可读性:

echo "<html>First line \r\n Second line</html>";

将输出:

<html>First line
Second line</html>

查看页面将是:

First line Second line

如果你真的是这个意思,你只需要用 "" 引号来修复单引号:

echo "\r\n";

否则,如果您要拆分文本,在我们的示例“第一行”和“第二行”中,您必须使用 html 代码<br />::

First line<br />Second line

这将输出:

First line
Second line

如果将整个脚本替换为:

echo "$clientid $lastname \r\n";
于 2010-11-21T14:52:56.080 回答
10

w3school 以这种方式提供:

echo nl2br("One line.\n Another line.");

通过使用此功能,您可以做到..我尝试了上面所说的其他方法,但他们不会帮助我..

于 2015-08-16T10:26:20.187 回答
6

没有什么对我有用。

PHP_EOL

. "\r\n";

$NEWLINE_RE = '/(\r\n)|\r|\n/'; // take care of all possible newline-encodings in input file
$var = preg_replace($NEWLINE_RE,'', $var);

为我工作:

$admin_email_Body = $admin_mail_body .'<br>' ."\r\n";
$admin_email_Body .= 'This is line 2 <br>' ."\r\n";
$admin_email_Body .= 'This is line 3 <br>' ."\r\n";
于 2020-01-04T04:34:29.680 回答
4

出于某种原因,每一篇询问 PHP 中换行符转义的帖子都没有提到简单地在单引号字符串中插入换行符会完全符合您的想法的情况:

例如 1。

 echo 'foo\nbar';

示例 1 显然没有打印出想要的结果,但是,虽然您确实不能在单引号中转义换行符,但您可以有一个:

例如 2。

 echo 'foo
 bar';

示例 2 具有完全所需的行为。不幸的是,插入的换行符取决于操作系统。这通常不是问题,因为 Web 浏览器/服务器会正​​确解释换行符,无论它是 \r、\r\n 还是 \n。

显然,如果您计划通过 Web 浏览器和多个操作系统等其他方式分发文件,则此解决方案并不理想。在这种情况下,您应该看到其他答案之一。

注意:使用功能丰富的文本编辑器,您应该能够插入换行符作为二进制字符,它表示与编辑文件的操作系统不同的操作系统上的换行符。如果一切都失败了,只需使用十六进制编辑器插入二进制 ascii 字符即可。

于 2013-07-12T04:41:23.060 回答
3

使用 PHP nl2br 获取文本字符串中的换行符..

$text = "Manu 是个好孩子。(Enter)他的代码写得很好。

回声 nl2br($文本);

结果。

马努是个好孩子。

他可以很好地编码。

于 2013-10-29T19:02:15.303 回答
2

使用 chr (13) 回车,使用 chr (10) 换行

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo chr (13). chr (10);
于 2013-06-05T09:10:20.033 回答
2

我也在单引号和双引号中尝试过这种组合。但没有一个奏效。而不是在双引号中\n更好地使用。<br/>像这样..

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";
于 2013-04-10T07:13:03.317 回答
2

对于任何 echo 语句,我总是<br>在双引号内使用。

于 2017-02-15T20:13:19.050 回答
0

You Can Try This.
<?php
   $content = str_replace(PHP_EOL, "<br>", $your_content);
 ?>
 
<p><?php echo($content); ?></p>

于 2019-10-29T16:12:30.650 回答