【问题标题】:how to remove new lines and returns from php string?如何从php字符串中删除新行和返回?
【发布时间】:2011-04-28 12:42:13
【问题描述】:

一个 php 变量包含以下字符串:

<p>text</p>
<p>text2</p>
<ul>
<li>item1</li>
<li>item2</li>
</ul>

我想删除此字符串中的所有换行符,使字符串如下所示:

<p>text</p><p>text2><ul><li>item1</li><li>item2</li></ul>

我尝试了以下方法但没有成功:

str_replace('\n', '', $str);
str_replace('\r', '', $str);
str_replace('\r\n\', '', $str);

有人知道如何解决这个问题吗?

【问题讨论】:

标签: php string newline


【解决方案1】:

您需要将\n 放在双引号中。
在单引号内它被视为两个字符'\' 后跟'n'

你需要:

$str = str_replace("\n", '', $str);

更好的选择是将PHP_EOL 用作:

$str = str_replace(PHP_EOL, '', $str);

【讨论】:

  • PHP_EOL 确实不起作用。 PHP 不会在 str_replace 中正确找到它们。我必须这样做才能正确显示 html:将 \r\n 替换为
    (这是用于 Windows 下的 CRLF),然后将 \n 替换为
    (这是用于 Linux 下的 LF),最后,替换 \r带有空字符串(这不应该意味着什么)
  • 确实,PHP_EOL 不起作用。应该改为["\r\n", "\r", "\n"]
  • 您真的需要["\r\n", "\r", "\n"] 中的"\r\n" 吗?它已经在全球范围内删除了 \r 和 \n`,对吧?
  • FWIW,在 PHP 7 中我能够使用 $str = str_replace(PHP_EOL, '', $str); 并且它成功地工作了。
  • @JustCarty 这可能适用于您的特定情况,但它假定 $str 的值是在与运行脚本的系统相同的平台上创建的。如果你混合使用 windows 和 unix,你的日子会很糟糕。
【解决方案2】:

您必须将\n\r 包装在"" 中,而不是''。使用单引号时,转义序列将不会被解释(\'\\ 除外)。

The manual states:

如果字符串用双引号 (") 括起来,PHP 将解释 更多特殊字符的转义序列:

  • \n 换行(LF 或 ASCII 中的 0x0A (10))

  • \r 回车(CR 或 ASCII 中的 0x0D (13))\

  • (...)

【讨论】:

  • 这很重要。我曾经使用单引号 ' 并且文本总是替换为 "\n"(字符串类型)。如果您对此感到困惑,请记住这一点......
【解决方案3】:

更实用的东西(在任何地方都易于使用):

function replace_carriage_return($replace, $string)
{
    return str_replace(array("\n\r", "\n", "\r"), $replace, $string);
}

使用 PHP_EOL 作为搜索替换参数也是一个好主意!赞一个。

【讨论】:

【解决方案4】:

应该是这样的

str_replace("\n", '', $str); str_replace("\r", '', $str); str_replace("\r\n", '', $str);

【讨论】:

    【解决方案5】:

    要从字符串中删除新行,请按照以下代码进行

    $newstring = preg_replace("/[\n\r]/","",$subject); 
    

    【讨论】:

    • 在 laravel 中非常适合从产品描述中删除换行符。
    【解决方案6】:

    您可以将字符串数组传递给str_replace,因此您可以在一条语句中完成所有操作:

    $content = str_replace(["\r\n", "\n", "\r"], "", $content);
    

    【讨论】:

      【解决方案7】:

      正确的输出:

      '{"data":[{"id":"1","reason":"hello\\nworld"},{"id":"2","reason":"it\\nworks"}]}'
      
      function json_entities( $data = null )
      {           
          //stripslashes
          return str_replace( '\n',"\\"."\\n",
              htmlentities(
                  utf8_encode( json_encode( $data)  ) , 
                  ENT_QUOTES | ENT_IGNORE, 'UTF-8' 
              )
          );
      }
      

      【讨论】:

      • 这甚至不是这个问题的答案。事实上,唯一问题和答案的共同点是换行符 '\n' 文字和 str_replace 的使用,尽管目的完全不同。
      • 你有理由,对我有用,因为我使用 TextArea,有时需要换行,这些数据由 Angular ng-init 发送
      【解决方案8】:
      $no_newlines = str_replace("\r", '', str_replace("\n", '', $str_with_newlines));
      

      【讨论】:

        【解决方案9】:

        替换一个字符串:

        $str = str_replace("\n", '', $str);
        

        你也喜欢, (%n, %t, 所有特殊字符、数字、字符、。等)

        这意味着你可以在字符串中替换任何东西。

        【讨论】:

          【解决方案10】:
          $str = "Hello World!\n\n";
          echo chop($str);
          
          output : Hello World!
          

          【讨论】:

          • 这只会将它从乞求和字符串的末尾删除,而不是从中间删除。
          • 请在您的答案中添加一些解释,以便其他人可以从中学习
          猜你喜欢
          • 1970-01-01
          • 2022-11-25
          • 1970-01-01
          • 2013-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多