Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: formatowanie przesyłanego tekstu
Forum PHP.pl > Forum > PHP
simemo
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,
Seth
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
tiraeth
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
Seth
@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
dr_bonzo
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 />)
simemo
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,
Kuziu
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ć ?
simemo
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,
dr_bonzo
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.
simemo
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,
wizdaz
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
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.