Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Połamanie lini
Forum PHP.pl > Forum > PHP
Ikky
Mam taki problem: pobieram dane z bazy które były wpisywane do niej formularzem z textarea. Jednak jak je wyświetlam to nie ma enterów takie jak były wpisane w formularzu. Próbowałem zrobić swój bbcode który miał zamieniać [br] na <br /> i zamienia ale w taki sposób :

jakiś tekst<br /> nowa linijka która powinna być wyświetlona w nowej lini

czy jest jakiś prostszy sposób na osiągnięcie takiego efektu dodatkowo napisze ze jak pobieram ten sam tekst do textarea z bazy (opcja edytuj) to entery są

nie chce używać żadnych edytórów wysiwyg bo nie chce dawac użytkownikom dodatkowych opcji + walidacja

chodzi mi tylko i wyłącznie o bry

z góry dziekuje za pomoc i dodatkowo pokaze kod profilaktycznie


  1. public function bbCode($textdata)
  2. {
  3. $znaki_s = array('[br]', '', '');
  4. $znaki_n = array("<br />", '<b>', '</b>');
  5. $output = strtolower(str_replace($znaki_s, $znaki_n, $textdata));
  6. return $output;
  7. }
  8.  
  9.  
  10.  
  11. $misc = new Default_Model_Misc();
  12. $textdata = $pet_data['receiver'];
  13. $misc->bbCode($textdata);
  14. $adresat1 = $misc->bbCode($textdata);
  15. $this->view->assign('adresat', $adresat1);


ziqzaq
W textarea masz znaki nowej linii "\n", więc jak chcesz mieć nową linię w html to nl2br.
Ikky
k zrobiłem to ale i tak wyświetla mi się tak

Lorem ipsum dolor sit amet,<br />consectetur adipisicing elit,<br />sed do eiusmod tempor incididunt<br />ut labore et dolore magna aliqu
ziqzaq
Pomyśl co robisz jeszcze przy dodawaniu/wyciąganiu do/z bazy (vide htmlspecialchars, htmlentities itd.).
Zobacz co dostajesz w końcowym wyniku (źródło w przeglądarce).
TrevorGryffits
Tzn. wyświetla te <br /> a nie przerzuca do następnej linii? W takim razie tekst musi być gdzieś traktowany htmlspecialchars(). Z tego co widać to masz tam Smarty używane, więc będziesz musiał wgryźć się dokumentację jak wyłączyć escapowanie.

I jak już ziqzaq napisał - zamiast jakiś sztuczek z bbCode [br] do zamiany znaków nowej linii na <br /> używaj nl2br.
Ikky
No nie wiem co ja robie zwykłe zapytanie do bazy :s
O bbcode juz zapomniałem ta funckja idealnie dodaje br smile.gif tylko zeby jeszce sie to wyswietlało normalnie
i nie nie uzywam smartów tylko strona jest oparta na zendzie

źródło strony

  1. <div>Lorem ipsum dolor sit amet,&lt;br /&gt;consectetur adipisicing elit,&lt;br /&gt;sed do eiusmod tempor incididunt&lt;br /&gt;ut labore et dolore magna aliqua</div>


a wygląda to tak w przegladarce:

Lorem ipsum dolor sit amet,<br />consectetur adipisicing elit,<br />sed do eiusmod tempor incididunt<br />ut labore et dolore magna aliqua

jakieś pomysły?
ziqzaq
Dostałeś nawet dwie odpowiedzi, pomyśl chwilę...
PS. Zadam pytanie wprost. Używasz gdzieś funkcji htmlspecialchars lub/i htmlentities?
W zendzie (w widoku) może to wyglądać tak: $this->escape($val['wartosc'])
Ikky
Nie nie używam nigdzie takich funckji.

/edit

chyba że:

$this->view->tekst = $tekst;
ziqzaq
To może pokaż zapis i odczyt z bazy, oraz wyświetlanie tego stringa (widok).
Z tego co się orientuję to narazie w Zend Fr. nie ma opcji auto escape stringów, więc gdzieś musisz to robić. smile.gif
Ikky
kontroler
  1. $petitions = new Default_Model_DbTable_Petitions();
  2. $select_pet = $petitions->select()->where("petition_node = ?",$node);
  3. $pet_data = $petitions->fetchRow($select_pet);
  4.  
  5. $misc = new Default_Model_Misc();
  6. $textdata = $pet_data['petition_receiver'];
  7. $misc->brki($textdata);
  8. $adresat1 = $misc->brki($textdata);
  9. $this->view->adresat = $adresat1;


model
  1. function brki($textdata) {
  2. $output = strtr($textdata, array("\n" => '<br />', "\r\n" =>'<br />'));
  3. return $output;
  4. }


widok
  1. <div>Tekst: <? echo $this->escape($this->adresat); ?></div>


no ja niestety też dopiero w zendzie siedze dopiero od tygodnia miałem duzo problemów ale nie pomyslalbym ze moge sie zatrzymac na czyms takim:P
ziqzaq
Poległem smile.gif
Cytat(ziqzaq @ 8.08.2009, 12:51:40 ) *
W zendzie (w widoku) może to wyglądać tak: $this->escape($val['wartosc'])

Cytat
widok
  1. <div>Tekst: <? echo $this->escape($this->adresat); ?></div>

Zobacz sobie najpierw do swojego widoku a później w dokumentację Zend_View (escaping output).

//edit literówka
TrevorGryffits
A to:
  1. <div>Tekst: <? echo $this->escape($this->adresat); ?></div>
?
Ziqzaq już wcześniej o tym pisał...
Ikky
edytowałeś posta i jak go czytałem to jeszcze nie było nic o escape w widoku...

no ta i teraz mam tak w widoku :

  1. <? echo $this->tekst; ?>


linie sie łamią ale teraz jak ktoś sobie wpisze np <b> w formularzu to tez sie wyswietla co jest niedopuszczalne dla mnie
ziqzaq
Racja. Edytowałem post, ale obaj z Trevorem trąbiliśmy o escapeowaniu znaków - można było się domyślić. winksmiley.jpg
Jak chcesz się pozbyć tagów html i php ze źródła to masz np. strip_tags.
Ikky
ok wszystko hula
dzięki bardzo za pomoc smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.