PHP-如何创建换行符?


405

在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,但没有任何效果。为什么换行符不变成换行符?


Answers:


638

只有双引号的字符串解释转义序列\r\n并分别将其解释为“ 0x0D”和“ 0x0A”,因此您需要:

"\r\n"

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

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

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

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


1
@Pacerier在单个带引号的字符串中包含回车符和换行符的唯一方法是直接通过键盘输入字符(按Enter键,具体取决于编辑器在行尾的设置)。否则,只需使用字符串连接即可。
Gumbo 2014年

1
@Gumbo:另一方面,您说的是单引号字符串,只知道转义序列\\和\'。但是我只打印了一条带有echo的行,即<?php echo'您正在使用Internet Explorer。<br>'; 回显“添加新行”;?>,并在浏览器中看到输出。它确实在我显示的两个字符串之间添加了新行。这意味着字符<br>或<br/>将扩展为单引号字符串。除了这三个HTML字符外,PHP还能在单引号引起来的字符串中理解这些字符吗?恳请您相应地更新您的答案。谢谢。
PHPFan

1
@ user2839497您的发言没有任何意义。这里没有浏览器上下文。当然,浏览器在遇到<br/>时会呈现换行符。当然,没有什么可以阻止您在单个带引号的字符串中添加“ <br/>”。但这不会在简单的文本文件中呈现换行符。
Fencer

1
@Pacerier对于单引号策略,而不是像Gumbo在他的注释中建议的那样在编辑器中对字符串进行换行,您可以在Gumbos答案中使用其他解决方案,例如:在单引号字符串中输出“换行符” .chr(0x0A)。 '。
击剑者

2
您应该PHP_EOL改用
kurdtpage '19

233

使用预定义的PHP_EOL常量:

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

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


96

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

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

当使用“ echo”时,或者使用fwrite ...

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

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


4
提出问题的方式很可能是他将这些数据输出到文本框或javascript等,以进行解析或纯文本阅读,而不呈现为HTML
PC3TJ 2015年


23

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

单引号之间的字符串''是文字,这意味着它们在键入字符时会被完全对待。

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

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

输出:

$clientid $lastname
1 John Doe

您对PHP中不同类型的字符串表示法的解释很好,因为它显示了问题作者所犯的错误。但是,您的代码示例将不会产生预期的结果,因为变量在单个带引号的字符串中使用,并且正如您所提到的,它们不会被插值!
Damien Flament

@Damien Flament,那是我说的-单引号之间的内容不会插值,但双引号之间的内容是插值。也许我的示例令人困惑,因为您期望看到$ clientid和$ lastname的内容,而不是文字“ $ clientid”和“ $ lastname”。我认为这是我在调试期间使用的表的标题。以下行可能是echo "$clientid $lastname\r\n"
Kevin S. Miller

当写“预期结果”时,我说的是问题作者在其问题中预期的结果。将注释中显示的代码添加到答案中并显示结果可能会提高答案质量。
Damien Flament


13

实际上\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";

1
不,不应该。因为这主要是错误的。第一个代码块将呈现为First line Second line-包括换行符在内的任何空格都将在呈现的输出中压缩为一个空格字符。另外,</br>除了有效的HTML之外,什么都没有。
D_4_ni

1
还请记住,如果要使用php脚本发送文本电子邮件,则仍然需要这些行结尾而不是换行符(<br>)
KennyV 2014年

9

w3school提供了这种方式:

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

通过使用此功能,您可以做到。.我尝试了上述其他方式,但它们对我没有帮助。


问题不在于在HTML中的段落中换行。关于换行符
Damien Flament

对于上下文,该nl2br()函数将换行符转换为<br />HTML标记。这对于在浏览器页面上创建换行符而不是在文本文件或JavaScript中换行符或在屏幕或控制台上打印可能很有用。
SherylHohman

4

出于某些原因,每条有关PHP中换行符转义的帖子都没有提及仅在单引号字符串中插入换行符就能完全实现您的想法的情况:

前1。

 echo 'foo\nbar';

示例1显然不能打印出预期的结果,但是,尽管确实不能用单引号将换行符转义,但是您可以使用一个:

例2。

 echo 'foo
 bar';

示例2恰好具有所需的行为。不幸的是,插入的换行符取决于操作系统。这通常不是问题,因为Web浏览器/服务器将正确地解释换行符是\ r,\ r \ n还是\ n。

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

注意:使用功能丰富的文本编辑器,您应该能够将换行符作为二进制字符插入,表示在与编辑文件不同的操作系统上的换行符。如果其他所有方法均失败,则只需使用十六进制编辑器插入二进制ascii字符即可。


3

使用PHP nl2br可以在文本字符串中获取换行符。

$ text =“ Manu是个好男孩。(Enter)他会写得很好。

回声nl2br($ text);

结果。

Manu是个好男孩。

他会写得很好。


1
nl2br函数将换行符转换为<br />HTML标记。如果字符串不包含任何换行符,则此函数将不执行任何操作!此外,问题不在于在HTML中的段落中换行。关于换行符
Damien Flament

2

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

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";

问题不在于在HTML中的段落中换行。关于换行符
Damien Flament



1

什么都没有为我工作。

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";

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.