【问题标题】:PHP - how to create a newline character?PHP - 如何创建换行符?
【发布时间】:2011-05-13 09:53:36
【问题描述】:

在 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 的许多变体,但都没有奏效。为什么换行符不变成换行符?

【问题讨论】:

标签: php string-interpolation


【解决方案1】:

只有double quoted strings 将转义序列\r\n 分别解释为“0x0D”和“0x0A”,所以你想要:

"\r\n"

另一方面,Single quoted strings 只知道转义序列\\\'

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

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

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

【讨论】:

  • @Pacerier 在单引号字符串中包含回车符和换行符的唯一方法是直接通过键盘输入字符(按 Enter,具体取决于编辑器对行尾的设置)。否则只需使用字符串连接。
  • @Gumbo :另一方面,您说的是单引号字符串,只知道转义序列 \\ 和 \'。但我只是打印了一行 echo as '; echo '添加新行'; ?> 并在浏览器中看到了输出。它实际上在我显示的两个字符串之间添加了新行。这意味着字符

    在单引号字符串中展开。除了这三个之外,还有其他这样的 HTML 字符可以在单引号字符串中被 PHP 理解吗?我恳请您相应地更新您的答案。谢谢。
  • @user2839497 你所说的没有任何意义。这里没有浏览器上下文。当然,浏览器在遇到
    时会呈现一个换行符。当然,没有什么可以阻止您在单引号字符串中添加 '
    '。但这不会在简单的文本文件中呈现换行符。
  • @Pacerier 对于单引号策略,而不是像 Gumbo 在他的评论中建议的那样在编辑器中换行字符串,您可以使用 Gumbo 答案中的其他解决方案,例如:'outputing a newline'.chr(0x0A ).'在单引号字符串中'.
  • 你应该改用PHP_EOL
【解决方案2】:

你应该使用这个:

"\n"

您可能还想看看PHP EOL

【讨论】:

    【解决方案3】:

    使用预定义的PHP_EOL 常量:

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

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

    【讨论】:

      【解决方案4】:

      实际上\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 代码:&lt;br /&gt;:

      First line<br />Second line
      

      将输出:

      First line
      Second line
      

      如果将整个脚本替换为:

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

      【讨论】:

      • 不,不应该。因为它大多是错误的。第一个代码块将呈现为First line Second line - 包括换行符在内的任何空格都将在呈现的输出中压缩为一个空格字符。此外,&lt;/br&gt; 不是有效的 HTML。
      • 另外请记住,如果您使用 php 脚本发送文本电子邮件,您仍然需要这些行结尾而不是中断 (
        )
      【解决方案5】:

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

      单引号'' 之间的字符串是字面的,这意味着它们的处理方式与输入的字符完全相同。

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

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

      输出:

      $clientid $lastname
      1 John Doe
      

      【讨论】:

      • 您对 PHP 中不同类型的字符串表示法的解释很好,因为它显示了问题作者所犯的错误。但是您的代码示例不会产生预期的结果,因为变量在单引号字符串中使用,并且正如您所提到的,它们不会被插值!
      • @Damien Flament,这就是我所说的 - 单引号之间的内容没有被插值,但双引号之间的内容是。也许我的示例令人困惑,因为您希望看到 $clientid 和 $lastname 的内容,而不是文字“$clientid”和“$lastname”。我认为这是我在调试期间使用的表的标题。以下几行将是echo "$clientid $lastname\r\n"
      • 在写“预期结果”时,我说的是问题作者在其问题中预期的结果。将评论中显示的代码添加到您的答案中并显示结果可能会提高您的答案质量。
      【解决方案6】:

      我也在单引号和双引号中尝试过这种组合。但没有一个奏效。与其使用\n,不如在双引号中使用&lt;br/&gt;。像这样..

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

      【讨论】:

      • 问题不在于在 HTML 的段落中换行。这是关于换行符
      【解决方案7】:

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

      echo $clientid;
      echo ' ';
      echo $lastname;
      echo ' ';
      echo chr (13). chr (10);
      

      【讨论】:

        【解决方案8】:

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

        前 1.

         echo 'foo\nbar';
        

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

        前 2.

         echo 'foo
         bar';
        

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

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

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

        【讨论】:

          【解决方案9】:

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

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

          回声 nl2br($text);

          结果。

          马努是个好孩子。

          他的代码写得很好。

          【讨论】:

          • nl2br 函数将换行符转换为&lt;br /&gt; HTML 标记。如果字符串不包含任何换行符,这个函数什么也不做!此外,问题不在于在 HTML 的段落中换行。这是关于换行符
          【解决方案10】:

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

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

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

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

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

          【讨论】:

          • 按照提问的方式,很可能他正在将此数据输出到文本框或javascript等以进行解析或纯文本阅读,而不是呈现为HTML
          【解决方案11】:

          无论平台如何,使用常量 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);
          ?>
          

          【讨论】:

            【解决方案12】:

            w3school 以这种方式提供:

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

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

            【讨论】:

            • 问题不在于在 HTML 的段落中换行。这是关于换行符
            • 对于上下文,nl2br() 函数将换行符转换为&lt;br /&gt; HTML 标记。这对于在浏览器页面上创建换行符可能很有用,但对于在文本文件或 JavaScript 中创建换行符或打印到屏幕或控制台没有用。
            【解决方案13】:

            对于任何 echo 语句,我总是在双引号内使用 &lt;br&gt;

            【讨论】:

            • 问题不在于在 HTML 的段落中换行。这是关于换行符
            【解决方案14】:

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

            【讨论】:

              【解决方案15】:

              没有什么对我有用。

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

              【讨论】:

              • 这是 html 页面上下文。最初的问题是关于写入文件。我猜
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-05-01
              • 1970-01-01
              • 1970-01-01
              • 2015-09-26
              • 2012-02-28
              • 2011-07-08
              相关资源
              最近更新 更多