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>.
- <?
- function br2nl($text) {
- return preg_replace('/<br\\\\s*?\\/??>/i', "\\n", $text);
- }
- ?>
komentáře
RSS Komentáře
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.
(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.
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.
- souhlas
- 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)



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