【问题标题】:Ignore break line with str_replace用 str_replace 忽略断线
【发布时间】:2015-03-17 19:12:37
【问题描述】:

下面的代码将替换某些文本。实际上,我从带有file_get_contents 的文本文件中获取了$str 数据,所以请想象$str 中有一个新行。

$str = 'From: My Name <myemail@myname.com>
        To: storm@yahoo.com
        Message-ID: <1638618225.203837.1426581391642.JavaMail.yahoo@mail.yahoo.com>';

$old = array("My Name", "To: storm@yahoo.com");
$new   = array("New Name", "");
echo str_replace($old, $new, $str );

输出:

From: New Name 

Message-ID: <1638618225.203837.1426581391642.JavaMail.yahoo@mail.yahoo.com>

不幸的是,删除To: storm@yahoo.com 后,代码将创建一个换行符。如何在不创建新断线的情况下使用str_replace

【问题讨论】:

  • 它不会创建换行符,它已经存在了.. 而你只是用没有文本替换了一些文本,所以断行仍然存在..

标签: php str-replace line-breaks


【解决方案1】:

就像您说的那样,您是从文本文件中获取的,如果您显示的是文本文件中的内容,那么它不会创建换行符,实际上是您没有删除已经存在的新行。

试试

$str = 'From: My Name <myemail@myname.com>
        To: storm@yahoo.com
        Message-ID: <1638618225.203837.1426581391642.JavaMail.yahoo@mail.yahoo.com>';

$old = array("My Name", "To: storm@yahoo.com\n");
$new = array("New Name", "");

【讨论】:

    【解决方案2】:

    str_replace 不添加新的换行符;它用你支持的字符串替换字符串,你告诉它用空字符串替换行中的文本。 最简单的方法是在搜索数组中包含换行符:

    $old = array("My Name", "To: storm@yahoo.com\n");
    

    【讨论】:

      【解决方案3】:

      它不会创建新行,它只是从您的str_replace() 离开。

      因此,如果您想删除仅包含换行符的每一行,您可以使用:

      (这里我首先将$old替换为$new,之后我将explode()字符串替换为换行符。然后我使用array_map()结合trim()删除这些字符(["", "\t", "\n", "\r", "\0", "\x0B"] ) 从每一行。然后我用array_filter() 删除所有剩余的空行,最后我再次implode() 字符串)

      echo $str = implode(PHP_EOL,
                      array_filter(
                          array_map("trim",
                              explode(PHP_EOL, str_replace($old, $new, $str))
                          )
                      )
                  );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-28
        • 2020-10-16
        相关资源
        最近更新 更多