[php] zamiana bbcode na html

Odpowiedz Nowy wątek
2006-07-28 15:54
ŁATATA
0

mam taki problem. Na forum PHPBB gdy wstawia się tag bbcode np [b][/b] do bazy wchodzi coś takiego [b:0983e84684][/b:0983e84684] Ściągnąłem sobie gotowca z internetu który zamienia kod bbcode na html ale tam zamienia tagi typu [b]
Jak zrobić aby zamieniało te tagi ([b:0983e84684]) na html. kod zamieniający tagi [b] na html jest taki:

$str = preg_replace("#\[b\](.*?)\[/b\]#si", "<b>\\1</b>", $str);

Prosiłbym o edycje tego kodu tak aby działało dla tagów [b:0983e84684] gdzie 0983e84684 mogą znajdować się nieskończenie wiele cyfr i liter.
Jeżeli to możliwe prosiłbym o wytłumaczenie tego kodu albo jakiś link gdzie moge znaleŹć dokładny opis wyrażeń i funkcji typu preg_replace i ereg_replace itp. Szukając na google kilka stron znalazłem ale wszędzie wytłumaczone w bardzo dużym skrócie i nie potrafię tego zrozumieć i też np. nigdzie nie mogłem znaleŹć co oznacza znak # i #si :) Proszę o pomoc
Z góry dziękuję

Pozostało 580 znaków

2006-07-28 16:19
0

może

$str = preg_replace("#\[b:.*?\](.*?)\[/b\]#si", "<b>\\1</b>", $str);

# nic nie oznacza - to może być dowolny znak, którego nie będziesz stosować w środku wyrażenia, najczęściej jest to "/" ale może być cokolwiek, "oddziela wyrażenie od parametrów" czy tu "si" - "i" znaczy "case Insensitive" czyli A = a a "s" to chyba znaczy że kropka (oznaczająca dowolny znak) będzie też pasować do nowej linii

[ escaped [ - czyli po prostu znak "[" bez specjalnego znaczenia (bez backslasha ma znaczenie przedziału)

b: - b, dwukropek
. - dowolny znak dowolną ilość razy, ale
.
? - jw. tyle że próbuje nałapać jak najmniej można
] - znak "]"
(.*?) jw tyle że teraz co złapie to daje do \1 (backreference 1 ?)

dalej podobnie jak wcześniej

jak chcesz się nauczyć wyrażeń to może spróbuj ulubionej strony Marooneda http://www.regular-expressions.info/

ale właściwie to chciałem się w tym poście ja spytać - czemu do bazy jest tak dziwnie dodawane ?


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-07-28 16:36
ŁATATA
0

zrobiłem tak:

preg_replace("#\[b:.*\](.*?)\[/b:.*\]#si", "<b>\\1</b>", $str);

bez znaku zapytania i też działa ;] co tto za różnica czy ze znakiem czy bez ?

Pozostało 580 znaków

2006-07-28 16:44
0

w tym przypadku to chyba żadna

ale bez znaku teoretycznie np [b].*[/b] łapie

[b]abc[/b]fsdfsd [b]fsdfsdf[/b]

a ze znakiem [b].*?[/b]:

[b]abc[/b]fsdfsd [b]fsdfsdf[/b]


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-07-28 17:16
ŁATATA
0

eee nie kminie :/

Pozostało 580 znaków

2006-08-01 02:29
0

skrypt działa od wyrażenia do wyrażenia, przy czym ze znakiem zapytania kończy działanie przy pierwszej okazji, a zrobienie tekstu typu:
[b]asdasdasd[/b][b]asdasdasd[/b]aaaaaaaaaaaa[b]asdasdasd[/b][b]asdasdasd[/b]
wyświetli się bez znaku w ten sposób:
asdasdasd[/b][b]asdasdasd[/b]aaaaaaaaaaaa[b]asdasdasd[/b][b]asdasdasd
a ze znakiem:
asdasdasdasdasdasdaaaaaaaaaaaaasdasdasdasdasdasd


Stopki brak.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0