Это может показаться обманом, но будьте уверены, что это не так. Я искал как 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()
и preg_replace()
это, но я не знаю, какую иглу подавать обе эти функции, если в первую очередь, нет персонажей.
Я могу вручную получить доступ к соответствующему полю в БД, нажать Backspace для каждой строки и то, что я потом хочу делать с строкой. Поэтому я знаю, что мне нужен формат выше.
Вы должны заменить его прегой, которая удаляет все символы новой строки и возврат каретки. Код:
preg_replace( "/\r|\n/", "", $yourString );
Даже если символы \n
не появляются, если вы получаете возврат каретки, там есть невидимый персонаж. Замена preg должна схватить и исправить.
Решение Бена приемлемо, но 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
).
str_replace
этого используйте str_replace
:
$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
str_replace (PHP_EOL, null, $ str);
Что-то более функциональное (удобное в использовании):
function strip_carriage_returns($string) { return str_replace(array("\n\r", "\n", "\r"), '', $string); }
Использование PHP_EOL в качестве параметра замены поиска также является хорошей идеей! Престижность.
Вы также можете использовать 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)), вертикальная вкладка.
Поскольку вы работаете с WP, почему бы не воспользоваться функцией WordPress wpautop (), описанной здесь: https://codex.wordpress.org/Function_Reference/wpautop
Пытаться:
wpautop( $string );