Pasa lo mismo, el problema se debe a que yo en el $_POST le estoy mandando el $row['mensaje'] que es el que no esta modificado por el preg_replace ya que si enviara el modificado seria no practico porque haria una insercion del codigo HTML, pero seguramente funcionaria.
Aca te confeccione un ejemplo para que ejecutes y entiendas lo que digo:
Código:
<?
if ($_POST['responder']){
$ncitar = '[citar="' . $_POST['nombre'] . '"]';
$m = $ncitar .$_POST['mensaje']. "[/citar]";
echo "<textarea name='mensaje' cols='52' rows='7'>";
echo $m;
echo "</textarea>";
} else {
$mensaje="[citar=\"Raul\"]Compra Frutas.[/citar] Ok!";
$mensaje=preg_replace("/\[citar\=\"(.*?)\"\]/si","<div><p><b>\\1 Dijo:</b></p>",$mensaje);
$mensaje=preg_replace("/\[\/citar\]/si","</div>",$mensaje);
echo $mensaje;
//TE PREGUNTARAS PORQUE LA IGUALO AL PRIMER VALOR, ES DEBIDO A QUE ESTA LINEA TENDREMOS GUARDADA EN LA BD YA QUE NO GUARDAMOS EL CODIGO GENERADO POR PRE_REPLACE YA QUE SERIA NO PRACTICO POR EL CODIGO HTML GENERADO.
$mensaje="[citar=\"Raul\"]Compra Frutas.[/citar] Ok!";
}
?>
<form action="" method="post">
<input name="mensaje" value="<?=$mensaje?>" type="hidden" />
<input name="nombre" value="Cintia" type="hidden" />
<input class="btnpanel" name="responder" type="submit" value="Responder">
</form>
Saludos y muchas gracias.