Как удалить строки строки (без символов!) Из строки?
Это может показаться обманом, но будьте уверены, что это не так. Я искал как 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 должна захватить и исправить это.
Ответ 2
решение Ben приемлемо, но str_replace() намного быстрее, чем preg_replace()
$buffer = str_replace(array("\r", "\n"), '', $buffer);
Используя меньшую мощность процессора, уменьшает выбросы углекислого газа в мире.
Ответ 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);
Ответ 10
Поскольку вы работаете с WP, почему бы не воспользоваться функцией Wordpress wpautop(), описанной здесь: https://codex.wordpress.org/Function_Reference/wpautop
Try:
wpautop( $string );