Умный перенос строк

taster

Новичок
Здравствуйте! Столкнулся с такой проблемой. Нужно обработать многострочный текст, который ввел юзер.
А именно заменить все \n на <br/>, но при условии, что если следует больше четырех \n подряд, то они заменяются только на 3 <br/>, не больше.
Ну, обычная защита от юзеров, которые растягивают страницу до необычайных высот. Защита от злоупотребителей кнопки Enter.
 

taster

Новичок
Чувствую я, придется учить эти регулярные выражения...:(
 

ghost636

Новичок
PHP:
$str = preg_replace('/\n{2,}/', "\n", $str);
\n{2,} - от двух и более символов перевода строки, менять на один символ перевода строки - , "\n",
 

taster

Новичок
Сделал!!! ghost636, спасибо за наводку.

PHP:
$str = preg_replace("/[\s]{2,}/", "\n", $str);
 

hell0w0rd

Продвинутый новичок
Сделал!!! ghost636, спасибо за наводку.

PHP:
$str = preg_replace("/[\s]{2,}/", "\n", $str);
PHP:
$str = preg_replace('/\s\s+/', ' ', $str);
А вот из документации)))
Ваша регулярка не красивая. + ко всему она ищет пробельные символы - \n \r \t, сам пробел, так что два пробела в тексте = перенос строки)
 

GoodLuck777

Новичок
PHP:
$text = $_POST['text'];

while (!$text = str_replace("\r\n\r\n\r\n", "\n", $text));
while (!$text = str_replace("\n\n\n", "\n", $text));

$text = nl2br($text);

echo $text;
 

ghost636

Новичок
хмм..
вот я вот так тестировал:
PHP:
$str = 'fooo'."\n124\n\n\n\n\n\nsdfdsf";
echo $str;
echo '<hr>';
$str = preg_replace('/\n{2,}/', "\n", $str);
echo $str;
то что получилось, если смотреть через исходный код страницы в браузере:
PHP:
fooo
124





sdfdsf<hr>fooo
124
sdfdsf
т.е. все нормально.. перевод строки убирается..


а вот если переменную задать вот так:
PHP:
$str = "foo
sd



nsd


fdsf";
то ничего не получается..
в исходном коде есть переводы строки как в исходной переменной так и после пропускания через замену...
получается что в данном случае перевод строки не "\n", а что тогда?? 0_о
 

hell0w0rd

Продвинутый новичок
в зависимости от кодировки. Возможно - \r
Тебе не нужны именно переносы строк - тебе нужно ВСЕ пробельные символы более 1 под ряд заменять на пробел.
Ты не учел кучу ситуаций, твою регулярку можно обхитрить:
"\n \n \n" и тд.
Да и вообще правильно сказали, если человек идиот - он через букву напишет тебе колонкой текст.
Так что ставь overflow: scroll и не парься:)
 
Сверху