Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> formatowanie przesyłanego tekstu
simemo
post 2.11.2004, 19:04:44
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.10.2004

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


Witam.

Mam taki, dość kłopotliwy, ale w sumie drobny problem: wysyłam do mysql'a tekst z pola formularza textarea. Tekst ten jest podzielony na linie (przez wciśnięcie ENTER), a przed wysłaniem przepuszczam go przez addslashes().
Gdy potem odczytuję ten tekst z mysql'a, przepuszczam przez stripslashes(), to wyświetla mi się on na ekranie jednym ciągiem, bez końców linii, no chyba że wpakuję go w znacznik
  1. <pre>tekst</pre>
, ale wtedy akapity z pola textarea, robią się pojedynczymi liniami i rozciągają mi tabele psując calą stronę.

Jak zachowac znaki końca linii wysyłając tekst do mysqla (rekordu typu text), ale nie używając 'pre'?

Pozdrawiam,
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Seth
post 2.11.2004, 19:08:32
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Sproboj tego przed wyswietleniem tekstu (bez pre):
  1. <?php
  2. $text = str_replace(&#092;"n\", '<br>', $textZBazy);
  3. ?>

albo:
nl2br()" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
tiraeth
post 2.11.2004, 19:10:16
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Przepuść swój text przed wrzuceniem do bazy funkcją nl2br() zamieni ona znaki nowej linii na html'owskie <br>....

oczywiście lepiej zrobić tak:
  1. <?php
  2. $zmienna = str_replace('rn', '<br />', $zmienna);
  3. ?>



edit: Seth.. wyprzedziłeś mnie tongue.gif

Ten post edytował Tiraeth 2.11.2004, 19:10:45
Go to the top of the page
+Quote Post
Seth
post 2.11.2004, 19:12:31
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


@Tiraeth: winksmiley.jpg

btw: Pierwsza wartosc w str_replace jest zla. Dales \r\n w ' ', co spowoduje, ze nie zostanie to sparsowane i uznane za znacznik nowej lini.
Swoja droga \r\n to znak nowej lini w Windowsie, w Linuxie jest tylko \n
Go to the top of the page
+Quote Post
dr_bonzo
post 2.11.2004, 23:53:56
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


1. Przy wprowadzaniu danych do bazy uzyj addslashes().
2. Przy odczytywaniu danych z bazy NIE uzywaj stripslashes() -- baza zwroci ci dane bez nadmiarowych slashy wiec ich nie musisz wycinac ( jesli to zrobisz to zamieni ci "\r\n" --> "rn").
3. potem uzyj funkcji nl2br() (zamieni nowe linie na <br />)


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
simemo
post 3.11.2004, 09:30:33
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.10.2004

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


Bardzo dziękuję - dokładnie o to mi chodziło

Jednak, jak już dołałem przetestować, o ile właściwie po użyciu funkcji nl2br(), nie trzeba nic zmieniać by tekst prawidłowo się wyświetlił na stronie www, o tyle, wrzucając go jako wartości zmiennej w polu textarea, dobrze jest użyć:
  1. <?php
  2.  
  3. $zmienna=str_replace('<br />','', $zmienna);
  4.  
  5. ?>

wtedy tekst się wyświetla prawidłowo, a i nie przeszkadzają irytujące znaczki br, które w textarea nie znikają.
No chyba że jest jeszcze inna funkcja która potrafi zrobic coś takiego, by br zniknęły przed wyświetleniem.

Pozdrawiam,
Go to the top of the page
+Quote Post
Kuziu
post 3.11.2004, 11:30:07
Post #7





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

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


a może po prostu przy wczytywaniu do TEXTAREA nie dawać nl2br(); i wtedy nie bedzie trzeba go usuwać ?

Po co coś dodawać a za chwilę usuwać ? nie lepiej tego nie dodawać ?

Ten post edytował Kuziu 3.11.2004, 11:30:32


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
simemo
post 4.11.2004, 09:23:30
Post #8





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.10.2004

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


Racja, ale ten tekst z bazy jest wczytywany w dwa miejsca: jedno to zwykły kod html na stronie, a drugie to pole textarea w panelu administracyjnym. W pierwszym przypadku muszą być BR, wiec tak czy siak mysze je dodać podczas zapisu tekstu do bazy. Gdy je wczytuję do panelu administracyjnego, to są mi one tymczasowo niepotrzebne i dlatego je usówam. Może istnieją bardziej eleganckie sposoby, ale ten jest chyba najprostszy.

Pozdrawiam,
Go to the top of the page
+Quote Post
dr_bonzo
post 4.11.2004, 09:55:33
Post #9





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat
W pierwszym przypadku muszą być BR, wiec tak czy siak mysze je dodać podczas zapisu tekstu do bazy. Gdy je wczytuję do panelu administracyjnego, to są mi one tymczasowo niepotrzebne i dlatego je usówam.


Czemu nie prosciej:

Zapisujesz w bazie ze znakami konca wiersza (bez uzywania nl2br())

Odczytujesz dane z bazy

Jesli potrzebujesz (zamieniasz dane na html) to uzyj funkcji nl2bt(), jesli nie (panel adm. i textarea) - nie uzywaj jej.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
simemo
post 5.11.2004, 09:58:01
Post #10





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.10.2004

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


Ja jednak pozostanę przy swoim sposobie, choćby dlatego że ten tekst jest znacznie częściej odczytywany na sronie niż w panelu administracyjnym, więc jeżeli zapisze go w bazie razem ze znacznikami BR, to potem nie musze go przetwarzać dodatkową funkcją nl2br() dodającą te znaczki , za każdym razem gdy oglądający wejdzie na stronę.
Panel jest używany znacznie żadziej, dlatego wydajniej jest zastosować str_replace() przy nim i przetwarzać tekst właśnie w tym miejscu.
Ilość dodatkowych danych w bazie nie jest wiele większa, a zbyt częst użycie niepotrzenej funkcji to przeciez czas procka który wypada oszczędzać - takie moje postfortranowskie zoboczenie winksmiley.jpg

Pozdrawiam,
Go to the top of the page
+Quote Post
wizdaz
post 15.12.2004, 22:26:25
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.04.2004

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


no a ja mam problemik, gdyż tworzy skrypt mi przerwy, których nie chcę, oto kod:
  1. <?php
  2.  
  3. Function znaczniki($tekst1){
  4. $tekst1=stripslashes(htmlspecialchars(trim($tekst1)));
  5. $tekst1 = preg_replace(&#092;"#(.*?)#si\", \"<b>1</b>\", $tekst1);
  6. $tekst1 = preg_replace(&#092;"#[br](.*?)#si\", \"<br />1\", $tekst1);
  7. $tekst1 = preg_replace(&#092;"#(.*?)#si\", \"<i>1</i>\", $tekst1);
  8. return $tekst1;
  9. }
  10.  
  11. ?>

gdzie zamienia znaczniki [b] na <b> itd.
Tylko tworzy mi przerwy jakbym dawał br na końcu lini pogrubianej czy podkreślanej. Jak zrobić, żeby nie robił przerw ze zdania w jednej lini na 3? nie moge użyć nl2br gdyż używa to inna funkcja na mojej stronie i się te dwie funkcje gryzą.

Dzięki za pomoc
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 Wersja Lo-Fi Aktualny czas: 13.07.2025 - 23:05