un'altra soluzione sarebbe da esaminarla prima di mandarla in pasto al bbcode parser. a tal proposito mi son creato una funzioncina :
codice:
function checkLinks($string) {
$arrelab="";
$arr=explode(' \r\n', $string);
for($i=0; $i<sizeof($arr); $i++) {
if ((strpos($arr[$i], 'www.')!==false) or (strpos($arr[$i], 'http://')!==false) or (strpos($arr[$i], 'ftp://')!==false)) {
if (strpos($arr[$i], '[url=')===false) {
$arr[$i]=''.$arr[$i].'';
}
}
$arrelab=$arrelab." ".$arr[$i];
}
return $arrelab;
}
// row[0] è la stringa da stampare, presa dal DB
<? $row[0]=checkLinks(htmlspecialchars($row[0])); ?>
<?=forumBBCode($row[0])?>
sembra funzionare, tranne per il fatto che fà l'explode solo per un parametro ' ' (lo spazio), e a me servirebbe oltre che allo spazio anche per i ritorni a capo (non sò se esiste un modo con l'explore di impostare più delimitatori);
questo approccio non sò se sia il migliore, in quanto se ho una stringa memorizzata (supponiamo) in un mediumtext di mysql, fare l'explode su tale stringa è un operarazione esosa... (anche se il preg_replace viene cmq applicato su una stringa di tale dimensione...)
aspetto qualche vostra illuminazione