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

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

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

Пример строки может выглядеть так:

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() и делал это с ней, но я не знаю, какую иглу подавать любой из этих функции, если в нем нет символов.

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

Ответ 1

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

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

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

Ответ 3

$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

Ответ 4

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

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

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

$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);

Ответ 5

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

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

  • "" (ASCII 32 (0x20)), обычный пробел.
  • "\ t" (ASCII 9 (0x09)), вкладка.
  • "\n" (ASCII 10 (0x0A)), новая строка (перевод строки).
  • "\ r" (ASCII 13 (0x0D)), возврат каретки.
  • "\ 0" (ASCII 0 (0x00)), NUL-байт.
  • "\ x0B" (ASCII 11 (0x0B)), вертикальная табуляция.

Ответ 6

Чтобы нормально работать и в Windows, я предлагаю использовать

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

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

Ответ 7

str_replace (PHP_EOL, null, $str);

Ответ 8

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

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

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

Ответ 9

Для этой работы я использую 3 строки, поэтому рассмотрите $ s как свои "вещи"...

$s=str_replace(chr(10),'',$s);
$s=str_replace(chr(13),'',$s);
$s=str_replace("\r\n"),'',$s);