Hace tiempo tenia el mismo problema y use una funcion llamada 
preg_replace y tube mas problemas...  
Lo voy a compartir para todos... pasen la vos... 
functions.php  
 Código PHP:
    <?php
 
function setLinks($txt) {
 
$tex = preg_replace('`(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)`i', '<a rel="external" href="\\1">\\1</a>', $txt);
$tex = preg_replace('`([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)`i', '\\1<a rel="external" href="http://\\2">\\2</a>', $tex);
$tex = preg_replace('`([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})`i', '<a rel="external" href="mailto:\\1">\\1</a>', $tex); 
 
return $tex;
}
 
?>    
  y cuando usen un while o algo para traer datos de la base...  
 Código PHP:
    <?php
require 'functions.php';
 
while ($fila.....){
$apu = $fila['texto'];
?>
 
<?php echo setLinks($apu);?>
 
<?php
} mysql_close();
?>    
  
Bueno espero sirva... Saludos