Как удалить разрывы строк (без символов!) из строки?
это может показаться обманом, но будьте уверены, что это не так - я искал как так и остальную часть сети для ответа на мою проблему и в конечном итоге нашел те же самые недостаточные "решения" снова и снова. Во всяком случае, вот оно:
Я сохраняю пользовательский ввод из текстовой области в базу данных 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 ответов:
вы должны быть в состоянии заменить его на 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)), вертикальная вкладка.
что - то немного более функциональное (простой в использовании в любом месте):
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 );