Autor Zpráva
novacek_v_php
Profil *
Ahoj,

měl bych takový dotaz. Uživatelé mi na webu píší komentáře (umožnují pouze text, žádné html značky) a problém nastává, když někdo napíše komentář s 50ti řádky (prázdnými), např:
testovaci text







testovaci text


v šabloně to vypisuji takto:
$body = nl2br(htmlspecialchars($o->body));

a na webu se mi tedy zobrazí i 50 prázdných řádků. Lze nějakým jednoduchým způsobem zabránit tomu, aby se na vypisovaly více než 2 řádky? Znamená to tedy, nahradit výsledné "<br /><br /><br />" za "". Jde o to, aby někdo neudělal třeba 1000 enterů a mě to nenatáhlo stránku o 2000px.. což je docela nepříjemné.

$body = str_replace("\n\n\n", "", $body)
, ale nechce mi to fungovat..
\n
neoznačuje odřádkování?

Děkuji za rady
Tori
Profil
Koukněte na toto vlákno.
SwimX
Profil
novacek_v_php:
\n
neoznačuje odřádkování?

zkuste
\r\n
a také musíte mít řádku
$body = str_replace("\n\n\n", "", $body)

před řádkou
$body = nl2br(htmlspecialchars($o->body));

jinak už žádné
\r\n
neexistuje.
AM_
Profil
SwimX:
$body = str_replace("\n\n\n", "", $body)
to je trošku nešikovné rušit řádky po trojicích - pokud někdo napíše třeba:
lorem


ipsum

stane se z toho
loremipsum
což je divné.

Tohle je chytřejší řešení:
preg_replace("~[\r\n]+~", "\r\n",

smrskne libovolný počet odřádkování v jedno. Pokud bys chtěl povolit třeba dvě odřádkování za sebou tak už je to horší, fungovalo by
preg_replace("~[\r\n]{6,}~", "\r\n",

ovšem pro \r\n to povolí 3 řádky a pro \n jich to povolí 6. Momentálně mě nenapadá lepší.

//edit: lordfrikkovo řešení je evidentně lepší, tenhle trik jsem neznal. Samotného by mě zajímalo, co vlastně umí konstrukce ?:
//mé ponaučení: negooglete podle klíčového slova "preg". evidentně se častěji než "preg_replace" vyskytuje "pregnancy".
novacek_v_php
Profil *
Ok,

děkuji všem za rady, dnes už nemám čas odzkoušet, tak na to mrknu zítra večer.

Ještě jednou děkuji za ochotu a snahu pomoct.
lordfrikk
Profil
Tohle by mělo spolehlivě zajistit to co požaduješ. Nalezne to v textu 2 a více odřádkování za sebou (kontroluje všechny typy odřádkování - jsou jinačí pro Windows, unix a starší Mac OS) a zamění jej za jedno.

<?php
$text = 'bla



bla';
$text = preg_replace("/(?:\n|\r\n?){2,}/", PHP_EOL, $text);
echo nl2br($text);
/*
vysledek je:
bla<br />
bla
*/
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: