以下代码将替换某些文字。实际上,我从$str
的文本文件中获取了file_get_contents
数据,所以请想象$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
?
答案 0 :(得分:2)
就像你说你从文本文件中得到这个,如果你显示的是文本文件中的内容,那么它不会创建一个换行符,实际上你并没有删除已经存在的新行。
尝试
$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", "");
答案 1 :(得分:1)
str_replace
不会添加新的换行符;它用您支持的字符串替换字符串,并告诉它用空字符串替换行中的文本。
最简单的方法是在搜索数组中包含换行符:
$old = array("My Name", "To: storm@yahoo.com\n");
答案 2 :(得分:1)
它不会创建新行,只是从str_replace()
开始。
因此,如果您想要删除只包含换行符的每一行,您可以使用:
(此处我首先将$old
替换为$new
,然后用新行字符替换explode()
字符串。然后我将array_map()
与{{3}结合使用从每一行删除这些字符(["", "\t", "\n", "\r", "\0", "\x0B"]
)。然后我用trim()
删除所有剩余的空行,最后再删除array_filter()
字符串)
echo $str = implode(PHP_EOL,
array_filter(
array_map("trim",
explode(PHP_EOL, str_replace($old, $new, $str))
)
)
);