Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_replace zastąpienie entera
Forum PHP.pl > Forum > Przedszkole
Turson
Wartość z <textarea> jest wysyłana do bazy; każdy enter w textarea jest wysyłany do bazy jako <br /> co w późniejszym wyświetlaniu rekordu z bazu, daje efekt widocznego <br />.
Próbowałem preg_replace:
  1. $tekst = preg_replace("#\n|\r\n|\r#si", "<br />", $tekst);

krzotr
nl2br
JoShiMa
A nie wystarczy ln2br ?
Turson
Mam zastosowane nl2br
  1. function BBCode($tekst){
  2. $tekst = nl2br($tekst);
  3. $tekst = htmlspecialchars($tekst);
  4. $tekst = preg_replace("#\n|\r\n|\r#si", "<brsda/>", $tekst);

Daje przy zapisywaniu do bazy
  1. mysql_query("insert into blog values(NULL, '".htmlspecialchars($_POST["tytul"])."', '".(BBcode($_POST["tekst"]))."', '".htmlspecialchars($_SESSION["login"])."', 0)");

Pozostałe znaczniki bbcode działają jakie mam.

Załóżmy, że do textarea wpiszę
Kod
test
test


Z bazy wywali mi tekst
Kod
test<br />test



/////edit
Usunięcie
  1. $tekst = htmlspecialchars($tekst);

naprawiło problem, ale źle, bo tag html rzeczywiscie maja byc ignorowane
JoShiMa
No to znaczy, że chcesz zdekodowac w druga stronę, tak?


Moiże byś się tak skupił i napisał co właściwie chcesz zrobić, bo jak usunąć tagi to strip-tags

A w ogóle to polecam samodzielne grzebanie w manualu.
Turson
Wszystkie tagi HTML mają być ignorowane, ale enter w textarea ma dać przejście do nowej linii przy wyświetleniu rekordu
JoShiMa
To najpierw strip-tags potem nl2br i zapis do bazy

przy wczytaniu będziesz miał <br/> tam gdzie trzeba, chyba, że wczytujasz do textarea spowrotem to trzeba będzie <br /> zamienić znów na \r albo nie robić nl2br
Turson
Działa, dam kod możliwe, że się przyda przy okazji komuśsmile.gif
  1. function BBCode($tekst){
  2. $tekst = nl2br($tekst);
  3. $tekst = strip_tags($tekst, '<br />');
  4. $tekst = preg_replace("#\[b\](.*?)\[/b\]#si",'<b>\\1</b>',$tekst);
  5. $tekst = preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1"/>',$tekst);
  6. $tekst = preg_replace("#\[i\](.*?)\[/i\]#si",'<i>\\1</i>',$tekst);
  7. $tekst = preg_replace("#\[br\]#si",'<br>',$tekst);
  8. $tekst = preg_replace("#\n|\r\n|\r#si", "<br/>", $tekst);


Jeszcze jedno - czemu takowe preg_place nie działa:
  1. $tekst = preg_replace("#\[php\](.*?)\[/php\]#si",'<div class="php">\\1</div>',$tekst);

  1. .php{background:red;color:#424242;width:95%;border: 1px solid red;}

Wpisuję tekst w tagach
Kod
[php] blaa [/php]
JoShiMa
nie wiem czy to ma znaczenie, ale chyba brakuje shasha

zamiast \[/php\]
nie powinno być \[\/php\]
Turson
Niestety nie, dla porównania dam pogrubienie działające poprawnie
  1. //pogrubienie
  2. $tekst = preg_replace("#\[b\](.*?)\[/b\]#si",'<b>\\1</b>',$tekst);
  3. //php
  4. $tekst = preg_replace("#\[php\](.*?)\[/php\]#si",'<div class="php">\\1</div>',$tekst);

Niby wygląda tak samo, lecz nie działa. Tekst wyświetla się, lecz bez stylu

  1. .php{background:red;color:green;border: 1px solid red;}
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.