Помогите, пожалуйста, сделать примитивный парсер

Spear

почемучка
Помогите, пожалуйста, сделать примитивный парсер

Здравтсвуйте,
у меня небольшая проблемка (а может и большая :)).
Делаю форму комментирования, и хочу дать юзерам возможность юзать теги
<b>,</b>,<u>,</u>,<i>,</i>,<a href="link">,</a>
прямое юзанье ХТМЛа делать не буду, так как народные умельцы сразу вставят античатовский сниффер через яву.. да и вообще..

Решил сделать как на форуме:
$text - текст сообщения.

PHP:
$text = strip_tags($text);

$text = str_replace("[b]", "<b>", $text);
$text = str_replace("[/b]", "</b>", $text);

$text = str_replace("[u]", "<u>", $text);
$text = str_replace("[/u]", "</u>", $text);

$text = str_replace("[i]", "<i>", $text);
$text = str_replace("[/i]", "</i>", $text);
но вот незнаю как грамотно сделать такое:

Site name
или просто
Site name

да так, чтобы кулхацкеры не сломали :( Вообщем я просто после этих всех статей на античате про взлом форумов через теги, спаренные теги и прочее стал параноиком )

Помогите, пожалуйста ;) Может быть есть уже готовые скрипты-парсеры? Я бы взял с форума, но я итак в классах не соображаю ничего, а в Invision'овских - вообще НОЛЬ :(
 

Tor

Новичок
каждый день одни и те же вопросы...

(это намек на поиск по форуму)
 

antson

Новичок
Партнер клуба
см в мануале
$string = strip_tags($string, '<b><i><u>');

второй параметр разрещенные теги
 

Лисю

Guest
PHP:
	/*
	Функция форматирования BB-тегов
	*/
	
	function BB($in){
		
	//вырезамем строку непробельных символов, чья длинна более 200 символов
	$in = preg_replace("#(\w{200,})#", '<span class="context">Вырезано роботом</span>',$in);
	
	// текстовое форматирование
	$in  = preg_replace("#\\[B\\](.+?)\\[/B\\]#ims", "<strong>$1</strong>", $in);
	$in  = preg_replace("#\\[S\\](.+?)\\[/S\\]#ims", "<small>$1</small>", $in);
	$in  = preg_replace("#\\[HR\\]#ims", "<hr class=\"hr\" />", $in);
	$in = preg_replace("#-{3,}#", "<hr class=\"hr\" />", $in);
	$in  = preg_replace("#\\[I\\](.+?)\\[/I\\]#ims", "<em>$1</em>", $in);
	$in  = preg_replace("#\\[U\\](.+?)\\[/U\\]#ims", "<span class=\"underline\">$1</span>", $in);
	$in  = preg_replace("#\\[K\\](.+?)\\[/K\\]#ims", "<span class=\"context\">$1</span>", $in);
	$in  = preg_replace("#\\[C\\](.+?)\\[/C\\]#ims", "</p><blockquote class=\"cite\"><em>$1</em></blockquote><p>", $in);

	// замена URL с якорем ( [URL=path]anhor[/URL*] )
	$in  = preg_replace(
	"#\\[URL=(.+?)\\](.+?)\\[/URL\\]#ixsm",
	"<a href=\"$1\">$2</a>", $in);
	
	// замена простых URL ( [URL]path[/URL*] )
	$in  = preg_replace(
	"#\\[URL\\](.+?)\\[/URL\\]#ixsm",
	"<a href=\"$1\">$1</a>", $in);
	
	// тире
	$in = str_replace("--", "&mdash;", $in);
	
	// замена EMAIL с якорем ( [EMAIL=email_adress]anhor[/EMAIL*] )
	$in  = preg_replace(
	"#\\[EMAIL=(.+?)\\](.+?)\\[/EMAIL\\]#ixsm",
	"<a href=\"mailto:$1\">$2</a>", $in);
	
	// замена простых EMAIL ( [EMAIL]email_adress[/EMAIL*] )
	$in  = preg_replace(
	"#\\[EMAIL\\](.+?)\\[/EMAIL\\]#ixsm",
	"<a href=\"mailto:$1\">$1</a>", $in);
	
	//--------------------------------------------------------------------
	// Замена тегов изображений с align-аттрибутами
	// Если найдено выражение вида [IMG SRC=path/to/image.gif RIGHT]
	// то оно заменяется на тег img, с соответствующим float и уникальным id с префиксом uniqImg_
	// если атрибут float не указан, то по умолчанию используется LEFT
	//--------------------------------------------------------------------
	if(preg_match_all("#\\[IMG SRC=http://([^\s<>]+?)(?: (LEFT|RIGHT))?\\]#im", $in, $matches)){
		for($i=0; $i<count($matches[1]); $i++){
		if(empty($matches[2][$i]))	$matches[2][$i] = "left";
		$float = strtolower($matches[2][$i]);
		$path = htmlspecialchars($matches[1][$i], ENT_QUOTES);
			$in = str_replace($matches[0][$i], '<a href="http://'.$path.'"><img style="float:'.$float.'" class="uniqImg" src="http://'.$path.'" alt="Изображение находится по адресу '.$path.'" id="'.uniqid("uniqImg_").'" /></a>', $in);
		}
	}
	//--------------------------------------------------------------------
	// Замена простых тегов изображений ( [IMG]path_to_image[/IMG ] )
	//--------------------------------------------------------------------
	if(preg_match_all("#\\[IMG\\](.+?)\\[/IMG\\]#ixm", $in, $matches)){
		for($i=0; $i<count($matches[1]); $i++){
			$path = htmlspecialchars($matches[1][$i], ENT_QUOTES);
			$in = str_replace($matches[0][$i], '</p><div style="clear:both"><a href="'.$path.'"><img class="uniqImg" src="'.$path.'" alt="Изображение находится по адресу '.$path.'" id="'.uniqid("uniqImg_").'" /></a></div><p>', $in);
		}
	}
	
	return $in;
	}// end BB
 
Сверху