Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] preg_replace zastąpienie entera
Turson
post 8.04.2011, 16:01:43
Post #1





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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

Go to the top of the page
+Quote Post
-krzotr-
post 8.04.2011, 16:04:54
Post #2





Goście







nl2br
Go to the top of the page
+Quote Post
JoShiMa
post 8.04.2011, 16:05:17
Post #3





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


A nie wystarczy ln2br ?


--------------------
Go to the top of the page
+Quote Post
Turson
post 8.04.2011, 16:08:49
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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

Ten post edytował TursoN 8.04.2011, 16:11:41
Go to the top of the page
+Quote Post
JoShiMa
post 8.04.2011, 16:12:10
Post #5





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


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.

Ten post edytował JoShiMa 8.04.2011, 16:14:54


--------------------
Go to the top of the page
+Quote Post
Turson
post 8.04.2011, 16:13:56
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Wszystkie tagi HTML mają być ignorowane, ale enter w textarea ma dać przejście do nowej linii przy wyświetleniu rekordu
Go to the top of the page
+Quote Post
JoShiMa
post 8.04.2011, 16:16:37
Post #7





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


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


--------------------
Go to the top of the page
+Quote Post
Turson
post 8.04.2011, 16:39:07
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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]
Go to the top of the page
+Quote Post
JoShiMa
post 8.04.2011, 16:56:24
Post #9





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


nie wiem czy to ma znaczenie, ale chyba brakuje shasha

zamiast \[/php\]
nie powinno być \[\/php\]


--------------------
Go to the top of the page
+Quote Post
Turson
post 10.04.2011, 10:55:03
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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


Ten post edytował TursoN 10.04.2011, 10:55:34
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: 25.04.2024 - 17:20