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


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

Я сохраняю пользовательский ввод из текстовой области в базу данных 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 для каждого linebreak и то, что я позже хочу делайте со строкой работы. Поэтому я знаю, что мне нужен вышеуказанный формат.

9 109

9 ответов:

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

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

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

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

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

используя меньше силы К. П. У., уменьшает излучения углекислого газа мира.

$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

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

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

использовать :

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

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

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

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

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

эта функция возвращает строку с пробелами, очищенными от начала и конца 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)), вертикальная вкладка.

str_replace(PHP_EOL, null, $str);

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

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

С помощью PHP_EOL как параметр замены поиска также хорошая идея! Слава.

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

попробуй:

wpautop( $string );