Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Własna implementacja BBCode
Forum PHP.pl > Forum > PHP
akurczyk
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
marcio
To:
Kod
$tekst = htmlspecialchars($tekst);

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

A nl2br() usun i powinno hulac.
akurczyk
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
pyro
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 "\"
akurczyk
Może trochę inaczej jak zrobić aby spacje i taby były zamieniane na twarde tylko między [ code ] a [ /code ]?
marcio
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.
pyro
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"
akurczyk
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
empathon
Marna implementacja parsera. Znasz regułę DRY (preg_replace działa na tablicach)?
craker
to napisz jaka powinna być poprawna. krytykować każdy potrafi ...
Crozin
@craker: co innego konstruktywana krytyka, co innego "ot" wytykanie

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