Voy avanzando, basándome en la duda planteada en
este tema he encontrado el modo de mantener el BBCODE, aunque aún no es una solución completa, y seguro que fallará en más de una ocasión:
Código PHP:
<ul>
<?
$directorio = "./forum"; //Carpeta donde esta situado el foro.
include("$directorio/config.php");
$conexion = mysql_connect($dbhost,$dbuser,$dbpasswd);
mysql_select_db($dbname,$conexion);
$consulta = "select * from ".$table_prefix. "topics WHERE forum_id='16' && topic_id!='648' order by topic_title" ;
$resultado = mysql_query($consulta);
$i = 0;
while ($rows = mysql_fetch_array($resultado)) {
$consulta4 = "select * from ".$table_prefix."posts where post_id='$rows[topic_first_post_id]'";
$resultado4 = mysql_query($consulta4);
$datosx = mysql_fetch_array($resultado4);
$consulta5 = "select * from ".$table_prefix."posts_text where post_id='$rows[topic_first_post_id]'";
$resultado5 = mysql_query($consulta5);
$datosy = mysql_fetch_array($resultado5);
//// Para reducir la longitud del título
// if (strlen($datost[topic_title]) > $caracteres) {
// $datost[topic_title] = substr($datost[topic_title],0,20)."...";
// }
$datosy[post_text] = str_replace("[b:".$datosy[bbcode_uid]."]","<b>", $datosy[post_text]);
$datosy[post_text] = str_replace("[/b:".$datosy[bbcode_uid]."]","</b>", $datosy[post_text]);
$datosy[post_text] = str_replace("[i:".$datosy[bbcode_uid]."]","<i>", $datosy[post_text]);
$datosy[post_text] = str_replace("[/i:".$datosy[bbcode_uid]."]","</i>", $datosy[post_text]);
$datosy[post_text] = str_replace("[u:".$datosy[bbcode_uid]."]","<u>", $datosy[post_text]);
$datosy[post_text] = str_replace("[/u:".$datosy[bbcode_uid]."]","</u>", $datosy[post_text]);
$datosy[post_text] = str_replace("[img:".$datosy[bbcode_uid]."]","<img src=", $datosy[post_text]);
$datosy[post_text] = str_replace("[/img:".$datosy[bbcode_uid]."]",">", $datosy[post_text]);
$datosy[post_text] = preg_replace("[\[url=([a-zA-Z0-9\-\_\.\/\:]*)\]]is",'<a href="$1">', $datosy[post_text]);
$datosy[post_text] = str_replace("[/url]","</a>", $datosy[post_text]);
//// Para quitar el bbcode
{
$datosy[post_text] = preg_replace("(\[.+?\])is",'',$datosy[post_text]);
}
//// Para reducir la longitud del texto del mensaje.
// {
// $datosy[post_text] = substr($datosy[post_text],0,150)."...";
// }
echo "<li class=\"mini\"><a href=\"$directorio/viewtopic.php?t=$rows[topic_id]\" name=\"$rows[topic_title]\" title=\"Pincha aquí para comentar la definición del término ¨$rows[topic_title]¨ o leer los comentarios de otros usuarios\">$rows[topic_title]</a>. $datosy[post_text]</li>";
$i++;
}
mysql_free_result($resultado);
mysql_close($conexion);
?>
</ul>
Tengo dudas con la eficacia de esta expresión regular para abarcar todas las URLs posibles:
"[\[url=([a-zA-Z0-9\-\_\.\/\:]*)\]]is"
Por lo demás, de momento
funciona bien.