Странно объркване на bbcodes...

streleca_stz

Registered
Здравейте! За съжаление не помня точно в коя тема (урок) беше, но бях намерил един много хубав скрипт за bbcodes.. Обаче сега гледам, че явно има проблем с него.. Ето как работи:
Записва се нормално в базата данни нали както са си bbcodes и за да се задейства кода трябва да се извика функцията bbcode($msg); А ето го и самата функция:
PHP:
function bbcode($text){ 
$text=preg_replace("/\[b\](.+?)\[\/b\]/s", '<b>$1</b>',$text); 
$text=preg_replace("/\[i\](.+?)\[\/i\]/s", '<i>$1</i>',$text); 
$text=preg_replace("/\[u\](.+?)\[\/u\]/s", '<u>$1</u>',$text); 
$text=preg_replace("/\[l\](.+?)\[\/l\]/s", '<div style="text-align:left;">$1</div>',$text); 
$text=preg_replace("/\[c\](.+?)\[\/c\]/s", '<div style="text-align:center;">$1</div>',$text); 
$text=preg_replace("/\[r\](.+?)\[\/r\]/s", '<div style="text-align:right;">$1</div>',$text); 
$text=preg_replace("/\[j\](.+?)\[\/j\]/s", '<div style="text-align:justify;">$1</div>',$text); 
$text=preg_replace("/\[s\](.+?)\[\/s\]/s", '<strike>$1</strike>',$text); 
$text=preg_replace("/\[list=un\](.+?)\[\/list\]/s", '<ul>$1</ul>',$text);
$text=preg_replace("/\[list=or\](.+?)\[\/list\]/s", '<ol>$1</ol>',$text);
$text=preg_replace("/\[\*\](.+?)\[\/\*\]/s", '<li>$1</li>',$text);
$text=preg_replace("/\[quote\](.+?)\[\/quote\]/s", '<table cellspacing="1" width="100%" border="0"><tr><td>Цитат:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$1</td></tr></table>',$text); 
$text=preg_replace("/\[quote\=(.+?)](.+?)\[\/quote\]/s", '<table cellspacing="1" width="100%" border="0"><tr><td>$1 каза:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$2</td></tr></table>',$text); 

$httpPtrn = 'http://[^\s]+';
$bbcodePtrn = '\[url\]('.$httpPtrn.')\[/url\]';
$bbcodeImg = '\[img\]('.$httpPtrn.')\[/img\]';
$bbcodePtrn2 = '\[url=('.$httpPtrn.')\](.+?)\[/url\]';
$bbcodeImg2 = '\[img=('.$httpPtrn.')\]('.$httpPtrn.')\[/img\]';

$matches = array ();
if (preg_match ('#'.$bbcodePtrn2.'#', $text, $matches) === 1) {
	if(preg_match('/[^а-я]/i',$matches[1])) {$matches[1]=urldecode($matches[1]);}
	  $text = str_replace($matches[0],"<a href=\"{$matches[1]}\">{$matches[2]}</a>",$text);
} 
else if (preg_match ('#'.$bbcodeImg2.'#', $text, $matches) === 1) {
	if(preg_match('/[^а-я]/i',$matches[1])) {$matches[1]=urldecode($matches[1]);}
	  $text = str_replace($matches[0],"<a href=\"{$matches[1]}\"><img src=\"{$matches[2]}\"/></a>",$text);
} 
else if (preg_match ('#'.$bbcodePtrn.'#', $text, $matches) === 1) {
	if(preg_match('/[^а-я]/i',$matches[1])) {$matches[1]=urldecode($matches[1]);}
	  $text = str_replace($matches[0],"<a href=\"{$matches[1]}\">{$matches[1]}</a>",$text);
} 
else if (preg_match ('#'.$bbcodeImg.'#', $text, $matches) === 1) {
	$ma = $matches[1];
	if(preg_match('/[^а-я]/i',$ma)) $ma=urldecode($ma);
	$text = str_replace($matches[0],"<img src=\"{$ma}\"/>",$text);
} 
else if (preg_match ('#'.$httpPtrn.'#', $text, $matches) === 1) {
	$ma = $matches[0];
	if(preg_match('/[^а-я]/i',$ma)) $ma=urldecode($ma);
	$text = str_replace($matches[0],"<a href='".$ma."'\">{$ma}</a>",$text);
} 

$text=preg_replace("/\[color\=(.+?)\](.+?)\[\/color\]/s", '<span style="color:$1">$2</span>',$text); 
$text=preg_replace("/\[size\=(.+?)\](.+?)\[\/size\]/s", '<span style="font-size:$1px;">$2</span>',$text); 
$text=preg_replace("/\[code\](.+?)\[\/code\]/s",'<table cellspacing="1" width="100%" border="0"><tr><td>Code:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$1</td></tr></table>',$text); 

$dir= "http://www.tokiohotel-bg.info/img/smiles";//папката в която са картинките
$smiles = array(':)',';)','(O_o)',';(','(chuckle)',':*','(mm)','(ligi)','(inlove)',':D','|-(','(OMG)','(wow)');//текста който е бил в textarea-та
$smileslink = array('smile.png','wink.png','lol.png','cry.png','chuckle.png','cunka.png','mmm.png','ligi.png','inlove.png','xaxa.png','pff.png','omg.png','uuu.png');//въведи съответното име на всяка една картинка
$i = 0;
foreach($smiles AS $sm) {
	$text = str_replace($sm,"<img src='$dir/$smileslink[$i]'/>",$text);
	$i++;
}
$text = nl2br($text); 
$s1s = array('/\[table\]\<br \/\>/s','/\[td\]\<br \/\>/s','/\[\/td\]\<br \/\>/s','/\[tr\]\<br \/\>/s','/\[\/tr\]\<br \/\>/s','/\<li\>\<br \/\>/s','/\<\/li\>\<br \/\>/s','/\<ol\>\<br \/\>/s','/\<ul\>\<br \/\>/s');
$bez = array('[table]','[td]','[/td]','[tr]','[/tr]','<li>','</li>','<ol>','<ul>');
$text = preg_replace($s1s,$bez,$text);
$text=preg_replace("/\[table\](.+?)\[\/table\]/s", '<table border="1" max-width="700">$1</table>',$text); 
$text=preg_replace("/\[tr\](.+?)\[\/tr\]/s", '<tr>$1</tr>',$text);
$text=preg_replace("/\[td\](.+?)\[\/td\]/s", '<td>$1</td>',$text); 
return stripslashes($text); 
}
А ето го и проблема: Ако например искам да сложа линк+снимка => {url=link}{img}image{/img}{/url} става някаква много гадна каша.. не се изпълнява кода и го показва така <a href="link"><img src="image"
Не помня точно къде го процакваше.. същата работа и ако е само линка.. Някой знае ли как мога да ги оправя, защото ми трябват много.. :cry:
 
// Малко е офтопик //
Това е клас, който аз съм си скалъпил. Ясно е, че няма нужда от клас за елементарни замествания, но гарантирам, че работи при всички ситуации.
 
Аз ползвам ето този код за преобразуване на bbcode в тагове и върши работа:

Код:
function bbcode($text){ 
$text=preg_replace("/\[b\](.+?)\[\/b\]/s", '<b>$1</b>',$text); //заменяме bbcode [b]текст[/b] с html-а <b>текст</b>... надолу се прави абсолютно същотото за всеки bbcode

$text=preg_replace("/\[i\](.+?)\[\/i\]/s", '<i>$1</i>',$text); 

$text=preg_replace("/\[u\](.+?)\[\/u\]/s", '<u>$1</u>',$text); 

$text=preg_replace("/\[l\](.+?)\[\/l\]/s", '<div style="text-align:left;">$1</div>',$text); 

$text=preg_replace("/\[c\](.+?)\[\/c\]/s", '<div style="text-align:center;">$1</div>',$text); 

$text=preg_replace("/\[r\](.+?)\[\/r\]/s", '<div style="text-align:right;">$1</div>',$text); 

$text=preg_replace("/\[j\](.+?)\[\/j\]/s", '<div style="text-align:justify;">$1</div>',$text); 

$text=preg_replace("/\[s\](.+?)\[\/s\]/s", '<strike>$1</strike>',$text); 

$patterns = array(
            '/\[url\=(.*?)\](.*?)\[\/url\]/is',
            '/\[img\=(.*?)\](.*?)\[\/img\]/is',
            '/\[url\](.*?)\[\/url\]/is',
            '/\[img\](.*?)\[\/img\]/is',
            '/((^http|https)(\S+))/is'
);
$replaces = array(
            '<a href="$1" target="_blank">$2</a>',
            '<a href="$1" target="_blank"><img src="$2" target="_blank"/></a>',
            '<a href="$1" target="_blank">$1</a>',
            '<img src="$1" target="_blank"/>',
            '<a href="$1" target="_blank">$1</a>'
);

$text = preg_replace($patterns, $replaces, $text);

$text=preg_replace("/\[list=un\](.+?)\[\/list\]/s", '<ul>$1</ul>',$text);

$text=preg_replace("/\[list=or\](.+?)\[\/list\]/s", '<ol>$1</ol>',$text);

$text=preg_replace("/\[\*\](.+?)\[\/\*\]/s", '<li>$1</li>',$text);

$text=preg_replace("/\[quote\](.+?)\[\/quote\]/s", '<table cellspacing="1" width="100%" border="0"><tr><td>Цитат:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$1</td></tr></table>',$text); 

$text=preg_replace("/\[quote\=(.+?)](.+?)\[\/quote\]/s", '<table cellspacing="1" width="100%" border="0"><tr><td>$1 каза:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$2</td></tr></table>',$text); 

$text=preg_replace("/\[color\=(.+?)\](.+?)\[\/color\]/s", '<span style="color:$1">$2</span>',$text); 

$text=preg_replace("/\[size\=(.+?)\](.+?)\[\/size\]/s", '<span style="font-size:$1px;">$2</span>',$text); 

$text=preg_replace("/\[code\](.+?)\[\/code\]/s",'<table cellspacing="1" width="100%" border="0"><tr><td>Code:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$1</td></tr></table>',$text); 

$dir= "smiles";//папката в която са картинките
$smiles = array(':)',':(',':D');//текста който е бил в textarea-та
$smileslink = array('smile.gif','sad.gif','laught.gif');//въведи съответното име на всяка една картинка
$i = 0;
foreach($smiles AS $sm) {
$text = str_replace($sm,"<img src='$dir/$smileslink[$i]'/>",$text);
$i++;
}


$text = nl2br($text); //преобразува всички празни редове до <br />

$s1s = array('/\[table\]\<br \/\>/s','/\[td\]\<br \/\>/s','/\[\/td\]\<br \/\>/s','/\[tr\]\<br \/\>/s','/\[\/tr\]\<br \/\>/s','/\<li\>\<br \/\>/s','/\<\/li\>\<br \/\>/s','/\<ol\>\<br \/\>/s','/\<ul\>\<br \/\>/s');
$bez = array('[table]','[td]','[/td]','[tr]','[/tr]','<li>','</li>','<ol>','<ul>');
$text = preg_replace($s1s,$bez,$text);//махам <br /> от някои места за да се изместват нещата

$text=preg_replace("/\[table\](.+?)\[\/table\]/s", '<table border="1" max-width="600">$1</table>',$text); 

$text=preg_replace("/\[tr\](.+?)\[\/tr\]/s", '<tr>$1</tr>',$text);

$text=preg_replace("/\[td\](.+?)\[\/td\]/s", '<td>$1</td>',$text); 


return stripslashes($text); //връща променото съдържание
}
 
idevbg каза:
// Малко е офтопик //
Това е клас, който аз съм си скалъпил. Ясно е, че няма нужда от клас за елементарни замествания, но гарантирам, че работи при всички ситуации.
Ще го пробвам утре, че тъкмо ще ставам (:

============================================

odyssey каза:
Аз ползвам ето този код за преобразуване на bbcode в тагове и върши работа:

Код:
function bbcode($text){ 
$text=preg_replace("/\[b\](.+?)\[\/b\]/s", '<b>$1</b>',$text); //заменяме bbcode [b]текст[/b] с html-а <b>текст</b>... надолу се прави абсолютно същотото за всеки bbcode

$text=preg_replace("/\[i\](.+?)\[\/i\]/s", '<i>$1</i>',$text); 

$text=preg_replace("/\[u\](.+?)\[\/u\]/s", '<u>$1</u>',$text); 

$text=preg_replace("/\[l\](.+?)\[\/l\]/s", '<div style="text-align:left;">$1</div>',$text); 

$text=preg_replace("/\[c\](.+?)\[\/c\]/s", '<div style="text-align:center;">$1</div>',$text); 

$text=preg_replace("/\[r\](.+?)\[\/r\]/s", '<div style="text-align:right;">$1</div>',$text); 

$text=preg_replace("/\[j\](.+?)\[\/j\]/s", '<div style="text-align:justify;">$1</div>',$text); 

$text=preg_replace("/\[s\](.+?)\[\/s\]/s", '<strike>$1</strike>',$text); 

$patterns = array(
            '/\[url\=(.*?)\](.*?)\[\/url\]/is',
            '/\[img\=(.*?)\](.*?)\[\/img\]/is',
            '/\[url\](.*?)\[\/url\]/is',
            '/\[img\](.*?)\[\/img\]/is',
            '/((^http|https)(\S+))/is'
);
$replaces = array(
            '<a href="$1" target="_blank">$2</a>',
            '<a href="$1" target="_blank"><img src="$2" target="_blank"/></a>',
            '<a href="$1" target="_blank">$1</a>',
            '<img src="$1" target="_blank"/>',
            '<a href="$1" target="_blank">$1</a>'
);

$text = preg_replace($patterns, $replaces, $text);

$text=preg_replace("/\[list=un\](.+?)\[\/list\]/s", '<ul>$1</ul>',$text);

$text=preg_replace("/\[list=or\](.+?)\[\/list\]/s", '<ol>$1</ol>',$text);

$text=preg_replace("/\[\*\](.+?)\[\/\*\]/s", '<li>$1</li>',$text);

$text=preg_replace("/\[quote\](.+?)\[\/quote\]/s", '<table cellspacing="1" width="100%" border="0"><tr><td>Цитат:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$1</td></tr></table>',$text); 

$text=preg_replace("/\[quote\=(.+?)](.+?)\[\/quote\]/s", '<table cellspacing="1" width="100%" border="0"><tr><td>$1 каза:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$2</td></tr></table>',$text); 

$text=preg_replace("/\[color\=(.+?)\](.+?)\[\/color\]/s", '<span style="color:$1">$2</span>',$text); 

$text=preg_replace("/\[size\=(.+?)\](.+?)\[\/size\]/s", '<span style="font-size:$1px;">$2</span>',$text); 

$text=preg_replace("/\[code\](.+?)\[\/code\]/s",'<table cellspacing="1" width="100%" border="0"><tr><td>Code:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$1</td></tr></table>',$text); 

$dir= "smiles";//папката в която са картинките
$smiles = array(':)',':(',':D');//текста който е бил в textarea-та
$smileslink = array('smile.gif','sad.gif','laught.gif');//въведи съответното име на всяка една картинка
$i = 0;
foreach($smiles AS $sm) {
$text = str_replace($sm,"<img src='$dir/$smileslink[$i]'/>",$text);
$i++;
}


$text = nl2br($text); //преобразува всички празни редове до <br />

$s1s = array('/\[table\]\<br \/\>/s','/\[td\]\<br \/\>/s','/\[\/td\]\<br \/\>/s','/\[tr\]\<br \/\>/s','/\[\/tr\]\<br \/\>/s','/\<li\>\<br \/\>/s','/\<\/li\>\<br \/\>/s','/\<ol\>\<br \/\>/s','/\<ul\>\<br \/\>/s');
$bez = array('[table]','[td]','[/td]','[tr]','[/tr]','<li>','</li>','<ol>','<ul>');
$text = preg_replace($s1s,$bez,$text);//махам <br /> от някои места за да се изместват нещата

$text=preg_replace("/\[table\](.+?)\[\/table\]/s", '<table border="1" max-width="600">$1</table>',$text); 

$text=preg_replace("/\[tr\](.+?)\[\/tr\]/s", '<tr>$1</tr>',$text);

$text=preg_replace("/\[td\](.+?)\[\/td\]/s", '<td>$1</td>',$text); 


return stripslashes($text); //връща променото съдържание
}
аз ползвам почти същия и отново така се прецаква :shock:
 
@streleca_stz тоя код си го намерил в bgdev.org ! :D гепи от тука http://web-tourist.net/login/login/view.php?st=3361

@odyssey тая проверка за линк само е малко бъгната... сега правя vol.2 на урока :)

иначе това ще е новата проверка за url -тата и img - тата

PHP:
$patterns = array(
            '/\[url\=(.*?)\](.*?)\[\/url\]/is',
            '/\[img\=(.*?)\](.*?)\[\/img\]/is',
            '/\[url\](.*?)\[\/url\]/is',
            '/\[img\](.*?)\[\/img\]/is',
            '/((http|https)\:\/\/(\S+))/is'
);
$replaces = array(
            '<a href="$1" target="_blank">$2</a>',
            '<a href="$1" target="_blank"><img src="$2" target="_blank"/></a>',
            '<a href="$1" target="_blank">$1</a>',
            '<img src="$1" target="_blank"/>',
            '<a href="$1" target="_blank">$1</a>'
);

$text = preg_replace($patterns, $replaces, $text);

очаквайте урока до края на тази седмица най вероятно... ползвам част от стария код + новите ми функцийки и ще има оцветяване на
Код:
 
IzKuFeLiQqQqQ каза:
@streleca_stz тоя код си го намерил в bgdev.org ! :D гепи от тука http://web-tourist.net/login/login/view.php?st=3361

@odyssey тая проверка за линк само е малко бъгната... сега правя vol.2 на урока :)

иначе това ще е новата проверка за url -тата и img - тата

PHP:
$patterns = array(
            '/\[url\=(.*?)\](.*?)\[\/url\]/is',
            '/\[img\=(.*?)\](.*?)\[\/img\]/is',
            '/\[url\](.*?)\[\/url\]/is',
            '/\[img\](.*?)\[\/img\]/is',
            '/((http|https)\:\/\/(\S+))/is'
);
$replaces = array(
            '<a href="$1" target="_blank">$2</a>',
            '<a href="$1" target="_blank"><img src="$2" target="_blank"/></a>',
            '<a href="$1" target="_blank">$1</a>',
            '<img src="$1" target="_blank"/>',
            '<a href="$1" target="_blank">$1</a>'
);

$text = preg_replace($patterns, $replaces, $text);

очаквайте урока до края на тази седмица най вероятно... ползвам част от стария код + новите ми функцийки и ще има оцветяване на
Код:
[/quote]

Вие вече срам нямате, сериозно. Като пускате код, който сте го взели от някой потребител от този форум, то поне опоменавайте от кого сте го взели, а не да си присъждате кодове, които не сте ги писали вие.

@Изкуфял този пример, който ти даде съм го писал аз, не знам в коя тема беше, и забелязах, че си го добавил в твоя урок. Хайде, сега да си промениш урока и да добавиш потребителя, от когото си го копирал, защото вече прекалявате.
 
IzKuFeLiQqQqQ каза:
@streleca_stz тоя код си го намерил в bgdev.org ! :D гепи от тука http://web-tourist.net/login/login/view.php?st=3361

@odyssey тая проверка за линк само е малко бъгната... сега правя vol.2 на урока :)

иначе това ще е новата проверка за url -тата и img - тата

PHP:
$patterns = array(
            '/\[url\=(.*?)\](.*?)\[\/url\]/is',
            '/\[img\=(.*?)\](.*?)\[\/img\]/is',
            '/\[url\](.*?)\[\/url\]/is',
            '/\[img\](.*?)\[\/img\]/is',
            '/((http|https)\:\/\/(\S+))/is'
);
$replaces = array(
            '<a href="$1" target="_blank">$2</a>',
            '<a href="$1" target="_blank"><img src="$2" target="_blank"/></a>',
            '<a href="$1" target="_blank">$1</a>',
            '<img src="$1" target="_blank"/>',
            '<a href="$1" target="_blank">$1</a>'
);

$text = preg_replace($patterns, $replaces, $text);

очаквайте урока до края на тази седмица най вероятно... ползвам част от стария код + новите ми функцийки и ще има оцветяване на
Код:
[/quote]

[b]@IzKuFeLiQqQqQ[/b] - Така вече работи и успях да се оправя.. И моля те пиши ми ЛС когато направиш втората версия на bbcode, за да го изпробвам (:
 

Back
Горе