Autor Zpráva
Bady
Profil *
ahoj! mam forum, chcel by som odstranit prazdne riadky z prispevkov, ako na to?


napr. tu hore su 2 volne riadky. take nieco nexem dovolit na mojom fore, lebo inteligenti mi tam pridu a odentruju mi 100 prazdnych riadkov. :) dakujem.
Hugo
Profil
Bady

No, ono by neškodilo napsat, jakým způsobem ty příspěvky ukládáš. Pokud jako html, tak vykopej zbytečné <br>, pokud je to jen text, tak hledej konce řádků. Pomocí regulárních výrazů by to neměl být problém.
jozob
Profil
Ak je to text, tak by teoreticky stačilo toto:
$novytext=str_replace("\n\n","",$starytext);

alebo:
$novytext=str_replace("\n\n\n","",$starytext);

To boli jednoduchšie možnosti, zložitejšia a spoľahlivejšia metóda by bola asi takáto:
$textpole=explode("\n",$starytext);

$novytext="";
foreach($texpole as $riadok)
{
if(strlen($riadok)>0) $novytext.=$riadok."\n";
}

Táto metóda vyhádže úplne všetky riadky, pokiaľ by si chcel nechávať aspoň jeden riadok, je to možné takto:
$textpole=explode("\n",$starytext);

$novytext="";
foreach($texpole as $kluc=>$riadok)
{
if(strlen($riadok)>0&&isset($textpole[$kluc+1])&&strlen($textpole[$kl uc+1])==0)
$novytext.=$riadok."\n";
}

Uvedená metóda odstráni prázdny riadok, len v prípade ak sa pod ním nachádza prázdny riadok. To u posledného riadku neplatí, takže nakoniec zostane vždy len jeden riadok.
Hugo
Profil
jozob

IMHO bude lepší použít např. preg_replace, a nahradit každou sekvenci více volných řádků pouze jedním.
jozob
Profil
Ešte dodám, v poslednej metóde, v tom vetvení, v poslednej podmienke je ako kľúč poľa premenná $kluc zväčšená o 1, skript tejto diskusie tam vkladá medzeru, ktorá tam nepatrí...

A ak by to bol HTML text, stačí nahradiť všetky znaky \n znakom <br />.
jozob
Profil
Hugo
Je to možné, ale mne osobne regulárne výrazy nejak nesadli. No musím si o tom niečo naštudovať, vyzerá to tak, že s nimi bude svet rýchlejší a krajší...
Hugo
Profil
jozob

Regulární výrazy jsou velmi užitečné, ale někdy dokáží pěkně zpomalit zpracovávání skriptu, takže se to nesmí přehánět. Ovšem tady bych se jich nebál.
jozob
Profil
Hugo
Jasné... Ešte ma odradila jedna vec, a to skutočnosť, ak spravíš nie celkom správny výraz, nemusí fungovať pre každý vstup, ale to je už len o precíznosti programátora.
Bady
Profil *
Ok lidi, ale.
ked dam odoslat tak sa mi zapise presne toto:



tak toto je strasny bublifuk


vsimnite si ze mi sem nepise ziadne \n proste to riadkuje. :)


takze pokial sa domnievam spravne, tak ked ten string neobsahuje /n tak ho tam proste nenajde, cize nenahradi... Taakze, asi mam neako blbe nastavene <textarea> lebo mi tam proste riadkuje, ale nezapisuje ziadne tagy... skusal som dat nl2br($odkaz); a potom pomocou
str_replace("<br \><br \>","",$odkaz); to vymazat... ale nic.
jozob
Profil
Bady
Tie lomítka si napísal presne opačne, správne je \n a <br />
Bady
Profil *
jezis... mno preklep... , tak si ich predstav naopak. skus sa zamerat na to co som pisal... dik
Anonymní
Profil *
Bady
Sorry, ale ako mám vedieť, že je to preklep?
jozob
Profil
Prepáčte, posledný príspevok je môj.
Bady
Profil *
jozob
Nemas ako... sorry.
ale pri hrabani sa v mysql admine som nasiel ze tie nove riadky sa zapisuju nie \n ale nieco ako \r\n nepomoze?
jozob
Profil
Bady
Tuším, že to je zápis konca riadku vo Windows. UNIXový formát je \n, Windows \r\n. Takže asi bude záležať od systému, na ktorom sa skript spúšťa.
jozob
Profil
Ak to bude podľa môjho predpokladu, potom by sa mohol upraviť môj pôvodný skript:
$textpole=explode("\r\n",$starytext);

$novytext="";
foreach($texpole as $kluc=>$riadok)
{
if(strlen($riadok)>0&&isset($textpole[$kluc+1])&&strlen($textpole[$kl uc+1])==0)
$novytext.=$riadok."\r\n";
}
jozob
Profil
<OT>Neviete niekto, prečo sa v kóde, ktonkrétne v tom kľúči poľa rozdeľuje slovo "kluc" na "kl uc"??</OT>
Toto téma je uzamčeno. Odpověď nelze zaslat.

0