Hola:
Para que substr() se evalúe como código PHP, tienes que utilizar el modificador "e" en el patrón. Además, el segundo parámetro debe ser una cadena (delimitada por comillas y utilizando caracteres de escape donde sea necesario).
Tu código debería quedar algo así:
Código php:
Ver original$texto_original ='Algún texto que contenga enlaces como http://rs152.rapidshare.com/files/117580024/WXPSP3UEByOGARJ.part8.rar que debería aparecer reemplazado.';
$texto_nuevo = preg_replace('/(http|ftp)+(s)?:(\/\/)((\w|\.)+)(\/)?(\S+)?/e', "'<a href=\"\\0\" target=\"_blank\">'.substr('\\0', 0, 8).'</a>'", $texto_original); echo $texto_nuevo;
Saludos,