Как удалить разрывы строк (без символов!) из строки?


Это может показаться обманом, но будьте уверены, что это не так - я искал ответ на свою проблему как в SO, так и в остальной части Интернета, и в итоге снова и снова находил одни и те же недостаточные "решения". В любом случае, вот оно:

Я сохраняю пользовательский ввод из текстовой области в базу данных MySQL (в среде WordPress, но, я полагаю, это не должно иметь значения для этой проблемы). Позже он извлекается из базы данных для показа администраторам в бэкэнде сайта. То проблема возникает, когда пользователи отправляют текст с разрывами строк (т. Е. нажимают клавишу Ввода).

Пример строки может выглядеть следующим образом:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!

Greetings,
Bill

В строке нет символов конца строки ("\n", "\r" или подобных).

Я использую nl2br() на нем для генерации вывода HTML, но этого недостаточно. В результате получается:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill

, Который, насколько я понимаю, является ожидаемым результатом nl2br(), поскольку он вставляет теги и не должен заменять разрывы строк в первом место?

Однако формат, который мне нужен, будет следующим:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill

Если бы в строке были символы EOL, такие как "\n", я бы ударил по ней либо str_replace(), либо preg_replace() и покончил с этим, но я понятия не имею, какую иглу подавать в любую из этих функций, если там вообще нет символов.

Я могу вручную получить доступ к соответствующему полю в БД, нажать пробел для каждого разрыва строки, и то, что я позже хочу сделать со строкой, работает. Поэтому я знаю, что мне нужно все вышеперечисленное формат.

Author: Ben Roux, 2012-05-25

9 answers

Вы должны иметь возможность заменить его на preg, который удаляет все новые строки и возвращает каретку. Код таков:

preg_replace( "/\r|\n/", "", $yourString );

Несмотря на то, что символы \n не отображаются, если вы получаете возврат каретки, там есть невидимый символ. Предварительная замена должна захватить и исправить их.

 289
Author: Ben Roux, 2018-02-20 07:02:17

Решение Бена приемлемо, но str_replace() намного быстрее, чем preg_replace()

$buffer = str_replace(array("\r", "\n"), '', $buffer);

Использование меньшей мощности процессора снижает мировые выбросы углекислого газа.

 345
Author: Demis Palma ツ, 2017-05-23 12:18:30
$str = "
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill";

echo str_replace(array("\n", "\r"), '', $str);  // echo $str in a single line
 13
Author: flowfree, 2012-05-25 16:03:13

Это потому, что nl2br() вообще не удаляет новые строки.

Возвращает строку с <br /> или <br> вставлено перед всеми новыми строками (\r\n, \n\r, \n и \r).

Вместо этого используйте str_replace:

$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
 10
Author: kenorb, 2015-03-03 00:26:51

Для правильной работы также в Windows я бы предложил использовать

$buffer = str_replace(array("\r\n", "\r", "\n"), "", $buffer);

"\r\n" - для Windows, "\r" - для Mac и "\n" - для Linux

 5
Author: Ajjaah, 2015-02-20 09:31:24

Вы также можете использовать PHP обрезку

Эта функция возвращает строку с пробелами, удаленными от начала и конца строки str. Без второго параметра функция trim() удалит эти символы:

  • "" (ASCII 32 (0x20)), обычный пробел.
  • "\t" (ASCII 9 (0x09)), вкладка.
  • "\n" (ASCII 10 (0x0A)), новая строка (перевод строки).
  • "\r" (ASCII 13 (0x0D)), возврат каретки.
  • "\0" ( ASCII 0 (0x00)), то НУЛЕВОЙ байт.
  • "\X0B" (ASCII 11 (0x0B)), вертикальная вкладка.
 5
Author: Gijs de Jong, 2016-04-18 14:49:53

Str_replace(PHP_EOL, null, $str);

 4
Author: Rafanake, 2015-07-06 13:50:57

Что-то немного более функциональное (простое в использовании в любом месте):

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

Использование PHP_EOL в качестве параметра замены поиска также является хорошей идеей! Почет.

 3
Author: tfont, 2015-08-11 12:31:21

Поскольку вы работаете с WP, почему бы не воспользоваться функцией Wordpress wpautop(), описанной здесь: https://codex.wordpress.org/Function_Reference/wpautop

Попробуйте:

wpautop( $string );
 -2
Author: Little Package, 2016-01-19 23:56:52