Rozwinięcie skryptu BBCode

0

Siemano, mam edytor, który konwertuje tekst na BBcode. Piszę do niego skrypt, który zamienia BBcode z bazy MySQL na znaczniki HTML. Większość już zrobiłem, ale mam problem z kilkoma znacznikami.

Tak wygląda kod tej funkcji zamiany

function BBCode($str){
	$str = htmlspecialchars($str);
	$str = nl2br($str);
	

// Odnośnik, otwieranie w nowym oknie
$str = preg_replace("#\[url\](.*?)?(.*?)\[/url\]#si", "<A HREF=\"\\1\\2\" TARGET=\"_blank\">\\1\\2</A>", $str);

// Odnośnik, otwieranie w nowym oknie, definiowanie treści odnośnika
$str = preg_replace("#\[url=(.*?)?(.*?)\](.*?)\[/url\]#si", "<A HREF=\"\\2\" TARGET=\"_blank\">\\3</A>", $str);

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

// Pochylony tekst
$str = preg_replace("#\[i\](.*?)\[/i\]#si", "<i>\\1</i>", $str);
// strike
 $str = preg_replace("#\[s\](.*?)\[/s\]#si",'<s>\\1</s>',$str);
 //obrazek
   $str = preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1" />',$str);
   //wyznaczanie
  $str = preg_replace("#\[ul\](.*?)\[/ul\]#si",'<ul class="lista">\\1</ul>',$str); 
$str = preg_replace("#\[li\](.*?)\[/li\]#si",'<li>\\1</li>',$str); 

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

	//tabela
$str = preg_replace("#\[table\](.*?)\[/table\]#si", "<table class='admin'>\\1</table>", $str);
$str = preg_replace("#\[td\](.*?)\[/td\]#si", "<td>\\1</td>", $str);
$str = preg_replace("#\[tr\](.*?)\[/tr\]#si", "<tr>\\1</tr>", $str);	

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

// Podkreślony tekst
$str = preg_replace("#\[u\](.*?)\[/u\]#si", "<u>\\1</u>", $str);

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

// Powiększanie tekstu
$str = preg_replace("#\[big\](.*?)\[/big\]#si", "<big>\\1</big>", $str);

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

// Akapit z wyrównaniem
$str = preg_replace("#\[p=(http://)?(.*?)\](.*?)\[/p\]#si", "<p align=\"\\2\">\\3</p>", $str);

return($str);
} 
 

A teraz te znaczniki z którymi mam problem:

 
[img=SZEROKOSCxWYSOKOSC] [/img] (np. [img=400x400]logo1.png[/img]

[font=NAZWA CZCIONKI]Treść[/font](np. [font=Arial Black]Treść[/font])

[size=WIELKOSC CZCIONKI]Tresc[/size] (np. [size=5]Wielkosc [/size])

[color=KOLOR HTML]Kolor z palety[/color] (np. [color=#9999cc]Kolor z palety[/color])

Chciałbym je dodać do tej samej funkcji, ale mam problem z wpisywaniem np. nazwy czcionki czy rozmiaru. Tzn na sztywno np <font size="2"></span> mi działa , ale nie wiem jak podstawić zmienną. Pomożecie?

0

tak samo jak np. [url= ?

0

Od razu Ci powiem, że:

a) wynajdujesz koło od nowa, jest sens to pisać po raz n-ty? Przykład polskiego dzieła, podobno świetny: http://forum.php.pl/index.php?showtopic=115269
b) regexpy Cię zgubią prędzej niż myślisz, niedomknięty, albo zamknięty w złej kolejności tag i Ci się to wszystko rozsypie, a to dobra droga do xss

0

Uczę się cały czas, a najlepsza jest nauka na błędach. Piszę sobie ten skrypt i naprawdę dużo mi to daje. Obczaje ten link, ktory podeslałeś, ale moje pytanie jest nadal aktualne ;)

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