Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: BBcode
Forum PHP.pl > Forum > PHP
Macok
Mam problem z bbcode na mojej stronie.
Mam skrypt ktory wyswietla na stronie posty z forum.
Niestety wiekszosc tagow bbcode nie dziala poniewaz w bazie danych phpbb kazdy tag ma przypisany dziwny ciag znakow np. taki:
Kod
51dcb724e4.
Calosc wyglada np. tak:
Kod
[b:aef496628c]pogrubiony tekst[/b:aef496628c]
. Co zrobic zeby bbcode dzialal poprawnie?

____________________________________________________________________________

Widze ,ze nikt nie wie wiec zadam to pytanie w inny sposob.
Oto kod odpowiadajacy za dzialanie tagu "b" na stronie:
Kod
// bbcode
Function bbcode($str){

// usun zbedne
$str=htmlspecialchars(trim($str));

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

// kolejny wiersz
$str=nl2br($str);

// js
$str = preg_replace_callback("#\<(.*?)javascript(.*?)\>#si", "bbcode_js", $str);

// wynik
return $str;}



// anti js
Function bbcode_js($str){
if(!eregi('<a href=\"java script:mailto:mail\(\'',$str[0])){
return str_replace('javascript','java_script',$str[0]);
}else{return $str[0];}}
Co zmienic w tym kodzie zeby skrypt wzial pod uwage nie tylko
Kod
[b]tekst[/b]
ale takze
Kod
[b:51dcb724e4]tekst[/b:51dcb724e4]
?
Luciano
Z tego co sie dopatrzylem w tym kodzie znacznik jest wyluskiwany przez

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


Wyrazenie regularne \[b\] oczekuje tylko znacznikow [b] z niczym w srodku, tak wiec
nic dziwnego, ze nie reaguje na [b:costam]. Musisz je rozbudowac. Co wiecej, jako ze
prawdopodobnie nie wiesz co bedzie po : a musi sie to zamykac identycznym ciagiem
czyli [/b:costam] przydadza sie tzw. odwolania wsteczne. Jesli nie masz doswiadczenia z regexpem
to zapraszam na calkiem madra stronke :
http://grabun.com/wyrazenia-regularne/

napisana jest troche technicznym jezykiem ale jak przebolejesz to wszystko bedzie jasne smile.gif
siemakuba
zeby zamienic coś takiego:
Cytat
[b:aef496628c]pogrubiony tekst [/b:aef496628c]

na coś takiego:
Kod
<b>pogrubiony tekst</b>

potrzebujesz coś takiego:
  1. <?php
  2. $bbcode = '[b:aef496628c]pogrubiony tekst [/b:aef496628c]';
  3. $bbcode = preg_replace('/[(b:[a-f0-9]{10})](.*?)[/1]/si', '<b>2</b>', $bbcode);
  4. ?>


pozdr.
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.