Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Połamanie lini
Ikky
post
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

Ostrzeżenie: (0%)
-----


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);


Go to the top of the page
+Quote Post
ziqzaq
post
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


W textarea masz znaki nowej linii "\n", więc jak chcesz mieć nową linię w html to nl2br.

Ten post edytował ziqzaq 8.08.2009, 11:25:27
Go to the top of the page
+Quote Post
Ikky
post
Post #3





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ziqzaq
post
Post #4





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


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).

Ten post edytował ziqzaq 8.08.2009, 11:39:20
Go to the top of the page
+Quote Post
TrevorGryffits
post
Post #5





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 29.07.2007
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Ikky
post
Post #6





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Ikky 8.08.2009, 11:49:29
Go to the top of the page
+Quote Post
ziqzaq
post
Post #7





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


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'])

Ten post edytował ziqzaq 8.08.2009, 11:57:19
Go to the top of the page
+Quote Post
Ikky
post
Post #8





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

Ostrzeżenie: (0%)
-----


Nie nie używam nigdzie takich funckji.

/edit

chyba że:

$this->view->tekst = $tekst;

Ten post edytował Ikky 8.08.2009, 11:59:48
Go to the top of the page
+Quote Post
ziqzaq
post
Post #9





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


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

Ten post edytował ziqzaq 8.08.2009, 12:08:12
Go to the top of the page
+Quote Post
Ikky
post
Post #10





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ziqzaq
post
Post #11





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


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

Ten post edytował ziqzaq 8.08.2009, 12:20:10
Go to the top of the page
+Quote Post
TrevorGryffits
post
Post #12





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 29.07.2007
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


A to:
  1. <div>Tekst: <? echo $this->escape($this->adresat); ?></div>
?
Ziqzaq już wcześniej o tym pisał...
Go to the top of the page
+Quote Post
Ikky
post
Post #13





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ziqzaq
post
Post #14





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Ikky
post
Post #15





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

Ostrzeżenie: (0%)
-----


ok wszystko hula
dzięki bardzo za pomoc smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 11:36