Замена ссылок в ББ-кодах

303
.
Алькатраз написал функцию для подмены внешних ссылок в тексте.

Но дело в том,что у меня стоит инклуд на ББ-коды.

Тоесть

Ссылки обрабатываются не

$var = preg_replace_callback('~\\[url=(https?://.+?)\\](.+?)\\[/url\\]|(https?://(www.)?[0-9a-z\.-]+\.[0-9a-z]{2,6}[0-9a-zA-Z/\?\.\~&_=/%-:#]*)~', 'url_replace', $var);


а в файле $var = BBCODE::ADD($var);

Тоесть функцией

$text = preg_replace_callback('`\\[url=((?:http|ftp)s?://.+?)\\](.+?)\\[/url\\]|((?<!\])(?:http|ftp)s?://(www.)?[0-9a-z\.-]+\.[0-9a-z]{1,7}[0-9a-zA-Z\/\?\.\~\&\;\_\=\%\-\+\:\#]*)|\[img(?(?=\=)\=([0-9]+x[0-9]+)|)\]((?:http|ftp)s?://[a-zA-Z0-9\-\_\+\.\%\~\/]+?\.(?:jpeg|jpe|jpg|gif|png|tga|tif|tiff|bmp))\[/img\]`',
     	
     				create_function(
    					'$m',
    					'if(isset($m[6]))
    					{
							$x = preg_replace(\'#^([0-9]+)x(?:.*?)$#si\', \'\1\', $m[5]);
							$y = preg_replace(\'#^(?:.*?)x([0-9]+)$#si\', \'\1\', $m[5]);
							$matches = array(\'%3C\',\'%3E\',\'%26\',\'%26\',\'%22\',\'%3A\',\'%28\',\'%29\');
							$m[6] = str_replace($matches, \'\', $m[6]);
							if(!empty($m[5]))
							{
								return \'<img class="expando" border="0" src="\'.$m[6].\'" width="\'.$x.\'" height="\'.$y.\'" alt="\'.$m[6].\'" style="border:0;border-radius:5" />\';
							}
							else
							{
								return \'<img src="\'.$m[6].\'" alt="\'.$m[6].\'" style="border:0;width:auto;height:auto;border-radius:5" />\';
							}
    					}
    					else
    					{
    						if (!isset($m[3]))
    						{
        						return \'<a href="\' . $m[1] . \'">\' . $m[2] . \'</a>\';
        					}
    						else
    						{
    							$lText = \'\';
    							if(mb_strlen($m[3])>70) $lText = mb_substr($m[3],0,70) . \'...\'; else $lText = $m[3];
        						return \'<a href="\' . $m[3] . \'">\' . $lText . \'</a>\';
        					}
    					}'
    				), $text);


Я вот понять не могу как сделать так чтобы в самом ББ-коде внешняя ссылка обрабатывалась url_replece
.
Вот сама функция подмены

/*
-----------------------------------------------------------------
Служебная функция парсинга URL
-----------------------------------------------------------------
*/
function url_replace($m) {
    global $set;
    if (!isset($m[3])) {
        $tmp = parse_url($m[1]);
        if('http://' . $tmp['host'] == $set['homeurl']){
            return '<a href="' . str_replace(':', '&#58;', $m[1]) . '">' . str_replace(':', '&#58;', $m[2]) . '</a>';
        } else {
            return '<a href="'  . $set['homeurl'] . '/go.php?url=' . base64_encode(str_replace(':', '&#58;', $m[1])) . '">' . str_replace(':', '&#58;', $m[2]) . '</a>';
        }
    } else {
        $tmp = parse_url($m[3]);
        $m[3] = str_replace(':', '&#58;', $m[3]);
        if('http://' . $tmp['host'] == $set['homeurl']){
            return '<a href="' . $m[3] . '">' . $m[3] . '</a>';
        } else {
            return '<a href="' . $set['homeurl'] . '/go.php?url=' . base64_encode($m[3]) . '">' . $m[3] . '</a>';
        }
    }
}
Всего: 2