Игнорировать разрыв строки с помощью str_replace

Код ниже заменит определенный текст. На самом деле я получаю $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 без создания новой линии разрыва?

0

Решение

Как вы сказали, вы получаете это из текстового файла, и если вы показываете, что находится в текстовом файле, то это не создание символа новой строки, а фактически вы не удаляете уже существующую новую строку.

Пытаться

$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", "");
2

Другие решения

str_replace не добавляет новый разрыв строки; он заменяет строку на то, что вы поддерживали, и вы сказали ей заменить текст в строке пустой строкой.
Самый простой способ — включить разрыв строки в массив поиска:

$old = array("My Name", "To: [email protected]\n");
1

Это не создает новую строку, это просто осталось от вашего 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))
)
)
);
1
По вопросам рекламы [email protected]