Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Własna implementacja BBCode
akurczyk
post 12.10.2008, 09:51:35
Post #1





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


Napisałem własną implementacje BBCode:
  1. <?php
  2. function bbcode($tekst) {
  3.     $tekst = htmlspecialchars($tekst); Wyłączenie możliwości stosowania znaczników HTML
  4.     $tekst = preg_replace("#(.*?)#si", "<b>1</b>", $tekst); Pogrubiony tekst
  5.     $tekst = preg_replace("#(.*?)#si", "<i>1</i>", $tekst); Pochylony tekst
  6.     $tekst = preg_replace("#(.*?)#si", "<u>1</u>", $tekst); Podkreślony tekst
  7.     $tekst = preg_replace("#[quot](.*?)[/quot]#si", "<blockquot>1</blockquot>", $tekst); Cytat
  8.     $tekst = preg_replace("#[code](.*?)[/code]#si", "<pre>1</pre>", $tekst); Kod
  9.     $tekst = preg_replace("#(.*?)#si", "<span style=\"color: 2;\">3</span>", $tekst); Kolor tekstu
  10.     $tekst = preg_replace("#(.*?)#si", "<span style=\"font-size: 2;\">3</span>", $tekst); Czcionka
  11.     $tekst = preg_replace("#[ul](.*?)[/ul]#si", "<ul>1</ul>", $tekst); Ponumerowanie
  12.     $tekst = preg_replace("#[ol](.*?)[/ol]#si", "<ol>1</ol>", $tekst); Wypunktowanie
  13.     $tekst = preg_replace("#[li](.*?)[/li]#si", "<li>1</li>", $tekst); Punkt
  14.     $tekst = preg_replace("#(.*?)#si", "<a href=\"2\">3</a>", $tekst); Link
  15.     $tekst = preg_replace("#[img](.*?)[/img]#si", "<img src=\"1\">", $tekst); Obrazek
  16.     $tekst = nl2br($tekst); Dodanie kolejnej linii
  17.     return $tekst; Wynik
  18. }
  19. echo bbcode("Tekst do sformatowania"); Wyświetlenie sformatowanego tekstu
  20. ?>

I pojawił się problem w tagu code (pre) każda linia jest poprzedzona jedną pustą linią.
Problem ten znika gdy za komentuję nl2br, ale wtedy tekst poza code nie jest łamany.
Proszę o pomoc

Ten post edytował akurczyk 13.10.2008, 21:46:52


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
marcio
post 13.10.2008, 16:11:22
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


To:
Kod
$tekst = htmlspecialchars($tekst);

Zamien na to:
Kod
$tekst = htmlspecialchars(trim($tekst));

A nl2br() usun i powinno hulac.


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
akurczyk
post 13.10.2008, 18:18:04
Post #3





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


trim służy do obcięcia tekstu:D
a nl2br służy do zamiany ENTERÓW na <br> więc tego nie mogę wywalić:D
Proszę o pomoc


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
pyro
post 13.10.2008, 18:28:00
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(akurczyk @ 13.10.2008, 19:18:04 ) *
ENTERÓW


enter to taki przycisk na klawiaturze, a to sie nazywa znak nowej lini smile.gif

wsadz ten kod w znacznik [ php ], bo mam wrazenie ze sa dodawane dodatkowe "\"


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
akurczyk
post 13.10.2008, 21:48:14
Post #5





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


Może trochę inaczej jak zrobić aby spacje i taby były zamieniane na twarde tylko między [ code ] a [ /code ]?

Ten post edytował akurczyk 13.10.2008, 21:51:00


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
marcio
post 13.10.2008, 22:17:22
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Zle sie wyslowilem dodaj ten trim() wyrzuc nl2br() i zastap je czyms takim:
  1. <?php
  2. $tekst = str_replace('r\n', '<Br>', $tekst);
  3. ?>

w bbcode i powinno hulac.

Ten post edytował marcio 13.10.2008, 22:17:53


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
pyro
post 13.10.2008, 22:40:14
Post #7





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(marcio @ 13.10.2008, 23:17:22 ) *
Zle sie wyslowilem dodaj ten trim() wyrzuc nl2br() i zastap je czyms takim:
  1. <?php
  2. $tekst = str_replace('r\n', '
  3. ', $tekst);
  4. ?>

w bbcode i powinno hulac.


jest pewna roznica miedzy '\r\n', a "\r\n"


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
akurczyk
post 14.10.2008, 09:30:36
Post #8





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


To też nie pomoże bo działa tak samo jak nl2br chodzi mi o to że pre wyświetla "ENTERY" (po enterze przechodzi do następnej linijki) i nl2br (lub twoje rozwiązanie) dodaje <br> więc w code każda .linijka jest wyświetlana podwójnie (jedna pusta). Zauważyłem że na innych stronach np w manualu spacje są zamieniane na nbsp.
może jakieś inne rozwiązanie nie bbcode jak to robią inni taką ramkę jak w manualu


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
empathon
post 14.10.2008, 13:07:22
Post #9





Grupa: Zarejestrowani
Postów: 246
Pomógł: 31
Dołączył: 13.11.2006
Skąd: się znamy?

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


Marna implementacja parsera. Znasz regułę DRY (preg_replace działa na tablicach)?


--------------------
Goldenline: Łukasz Rodziewicz
Go to the top of the page
+Quote Post
craker
post 15.10.2008, 05:51:17
Post #10





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 7.07.2006

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


to napisz jaka powinna być poprawna. krytykować każdy potrafi ...


--------------------
narazie brak sygnaturki
Go to the top of the page
+Quote Post
Crozin
post 15.10.2008, 16:54:56
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@craker: co innego konstruktywana krytyka, co innego "ot" wytykanie

Usuń znaki nowej linii po <br /> i tyle.
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: 18.07.2025 - 15:17