Код ниже заменит определенный текст. На самом деле я получаю $str
данные из текстового файла с file_get_contents
поэтому, пожалуйста, представьте, что есть новая строка в $str
,
$str = 'From: My Name <[email protected]>
To: [email protected]
Message-ID: <[email protected]>';
$old = array("My Name", "To: [email protected]");
$new = array("New Name", "");
echo str_replace($old, $new, $str );
Выход:
From: New Name
Message-ID: <[email protected]>
К сожалению после удаления To: [email protected]
, код создаст разрыв строки. Как я могу использовать str_replace
без создания новой линии разрыва?
Как вы сказали, вы получаете это из текстового файла, и если вы показываете, что находится в текстовом файле, то это не создание символа новой строки, а фактически вы не удаляете уже существующую новую строку.
Пытаться
$str = 'From: My Name <[email protected]>
To: [email protected]
Message-ID: <[email protected]>';
$old = array("My Name", "To: [email protected]\n");
$new = array("New Name", "");
str_replace
не добавляет новый разрыв строки; он заменяет строку на то, что вы поддерживали, и вы сказали ей заменить текст в строке пустой строкой.
Самый простой способ — включить разрыв строки в массив поиска:
$old = array("My Name", "To: [email protected]\n");
Это не создает новую строку, это просто осталось от вашего 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))
)
)
);