У меня настроена система, позволяющая пользователям отправлять свои статьи в мою базу данных. Поскольку это будет просто HTML, я не хочу ожидать, что они будут знать, что они будут набирать <br />
каждый раз, когда появляется новая строка, поэтому я использую функцию PHP nl2br()
для ввода.
Я также предоставляю инструмент для модификации статей, который вернет их статьи в форму (однако это другая страница) и позволит им редактировать ее. При этом элементы <br />
также появлялись (с новыми символами строки). Чтобы исправить появившиеся элементы
(как я и ожидал), я добавил preg_replace('/<br(\s+)?\/?>/i', "\n", mysql_result($result,$i,"content"))
, который нашел в другом вопросе на этом сайте. Он выполняет работу по удалению элементов <br />
, но, поскольку он заменяет их новыми строками, а новые строки в любом случае остались бы изначально, каждый раз, когда редактируется сообщение, будет добавляться все больше и больше новых строк, размечая абзацы и больше каждый раз. Это то, что пользователь не поймет.
В качестве примера, скажем, я ввожу в форму отправки статьи следующее:
Hello, this is my article.
I am demonstrating a new line here.
Это преобразует в:
Hello, this is my article.<br />
I am demonstrating a new line here.
Обратите внимание, что, хотя символ новой строки был преобразован, в тексте по-прежнему есть новая строка. В форме редактирования <br />
будет преобразован обратно в новую строку и будет выглядеть следующим образом:
Hello, this is my article.
I am demonstrating a new line here.
Потому что <br />
был преобразован в новую строку, но новая строка уже была. Итак, я думаю, что я ожидаю, что он будет первоначально преобразован во что-то вроде этого:
Hello, this is my article.<br />I am demonstrating a new line here.
Мне интересно ... есть ли способ остановить функцию nl2br()
от сохранения оригинальных строк? Может ли это быть связано с персонажем Windows \r\n
?