Jak zpracovávat řádkování nl2br, br2nl

Když používáte pro vstup textu obyčejný formulář, tedy textarea, budete nějak potřebovat zpracovávat řádkování.


Text zapsaný v tagu textarea označuje každé stisknutí enteru znakem pro nový řádek, tedy "\n". Pokud později chcete zobrazit tento text v html kódu, řádkování se nezobrazí, potřebujete nahradit znak \n za tag <br/>.

PHP na to má speciální funkci, nazývá se nl2br. Někdy je však potřeba funkce opačná, tedy potřebujete např. předat text s řádkováním pomocí tagu <br/> v javascriptové funkci alert(), pak by se mohla hodit funkce br2nl, ale tu už php nemá. Stačí na to pouze regulární výraz, viz následující řádky. Je case insensitive, tedy funguje jak na tagy zapsané jako <Br/>, <BR/> nebo <br/>, bere také v úvahu přebytečné mezery <br    /> nebo chybějící lomítko <br>.

  1. <?
  2. function br2nl($text) {
  3. return preg_replace('/<br\\\\s*?\\/??>/i', "\\n", $text);
  4. }
  5. ?>

komentáře

RSS Komentáře k článku RSS Komentáře   Add to Google
22.06.2008 21:21 | Anonym (SodaE) | Nice

Se časem může šiknout , pěkná věcička ;)

05.10.2008 12:36 | Anonym (MC) | Doplneni

Pokud chcete tuto funkci pouzit pro vraceni puvodni verze textu, na ktery jste nejprve pouzili nl2br, tak vysledek nebude presny dle ocekavani. Je to pro to, ze nl2br nevymeni oznaceni konce radku n za ale BRko doplni pred toto oznaceni (takze vznikne n) – logicky kdyz pak na tento text pouzijete reverzni funkci br2nl, vzniknou vam na misto puvodniho jednoho n dve. To samozrejme neni chyba ve funkci br2nl, ta funguje spravne jak ma, je to spis upozorneni pro stejne nepozorny programatory jako ja, aby pak nemuseli zbytecne zkoumat, kde ze to vlastne udelali chybu.

05.10.2008 12:41 | Anonym (MC) | Doplneni po druhe

(protoze je na formular zjevne pouzity pouze strip_tag tak zmizeli tagy, ktere jsem vepisoval, proto jeste jednou) Pokud chcete tuto funkci pouzit pro vraceni puvodni verze textu, na ktery jste nejprve pouzili NL2BR, tak vysledek nebude presny dle ocekavani. Je to pro to, ze NL2BR nevymeni oznaceni konce radku \n za <br />, ale BRko doplni pred toto oznaceni (takze vznikne <br />\n) – logicky kdyz pak na tento text pouzijete reverzni funkci BR2NL, vzniknou vam na misto puvodniho jednoho \n dve. To samozrejme neni chyba ve funkci BR2NL, ta funguje spravne jak ma, je to spis upozorneni pro stejne nepozorny programatory jako ja, aby pak nemuseli zbytecne zkoumat, kde ze to vlastne udelali chybu.

05.10.2008 12:43 | Anonym (MC) | sorry

Tak se omlouvam za 2 prispevky, a oba rozhozeny, ale nevim jak vypsat tag BR aby zustal videt, kdyztak to prosimte promaz.

05.10.2008 22:51 | Administrátor | Re: sorry

sorry kouknu na to co nejdříve, nejjednodušeji předejdu problémům tak, že provedu strip_tags a htmlspecialchars, takže tvoje příspěvky neměli nárok :) sory, dám to brzy dokupy

06.10.2008 18:21 | Anonym (MC) | Re: Re: sorry

Shodou okolnosti jsem diskuzi resil minuly tyden a ohledne vstupu uzivatelu (strip_tags a htmlspecialchars) sem se trochu inspiroval tady: http://php.vrana.cz/strip_tags.php Tak treba ti to bude napomocny.

19.03.2009 17:01 | Anonym (Jakub Vrána) | Nekoncepční
  1. Zpětných lomítek před s* je moc, správně by tam měla být dvě (a stačilo by i jedno).
  2. Funkce je koncepčně špatně. Data bychom měli ukládat (a vevnitř aplikace používat) nezávisle na výstupní vrstvě, takže „přeošetření“ uvnitř aplikace není potřeba.
20.03.2009 20:52 | Administrátor | Re: Nekoncepční
  1. souhlas
  2. problém nastává když očekáváme html jako výstup, a nikdy nevím jestli vstupem je text nebo html, pak si musím vybrat jestli chci, aby to byl vždy html nebo si ještě evidovat zda pracuji s html nebo textem (mě přijde vhodnější převádět jakýkoli vstup na html a vím že půjde o html)
11.02.2010 16:51 | Anonym (Honza) | mizí mi zpětná lomítka

Přátelé, mam menší problé. Mam na serveru webzdarma.cz jednoduchy formulář ale mám poblém s odesílání. V PHP mi sami zmizí zpětná lomítka a přijdou mi nesmysly..funguje nějáká náhrada za ?Děkuju za \n" Dík

Jméno
Název
Text
Lze používat Texy! syntax. Příklad syntaxe: "text odkazu":odkaz, **tučně**, *kurzíva*, `code`. PHP kód uzavírejte do <?php ... ?> a JavaScript do <script> ... </script>