Vamos a ver, que estamos mezclando códigos y nos estamos liando.
El código que dije que tenia errores era el de str_replace. Solucioné sus errores aquí:
http://www.phperos.net/foro/index.php/topic,4223.msg27766.html#msg27766 y ese código ya funciona perfectamente.
Otra cosa es el código que usaba ereg, que tambien contenía errores y solucioné con este código:
$capa = 1;
$texto = eregi_replace("\\[spoiler\\](.*)\\[/spoiler\\]", '<input type="submit" onclick="capa('.$capa.')" value="Contenido Oculto">
<div id="capa'.$capa++.'" style="border:solid #6699FF 1px;background:#B2E0F0; width:480px; display:none;">
\\1
</div>', $texto);Pero este código tiene la expresión regular mal, y a partir de ahí deriva un segundo error que es el que intentamos solucionar.
El error es el siguiente:
Si la variable $texto contiene esto:
[spoiler]Holaaaaaa[/spoiler]
Adiossssss
[spoiler]Segundo holaaaaaaa[/spoiler]
El resultado despues de haber pasado ese código sería este:
<input type="submit" onclick="capa(0)" value="Contenido Oculto">
<div id="capa0" style="border:solid #6699FF 1px;background:#B2E0F0; width:480px; display:none;">
Holaaaaaa[/spoiler]
Adiossssss
[spoiler]Segundo holaaaaaaa
</div>
Como ves solo sustituye el primer [spoiler] y el ultimo [/spoiler] y el resto lo deja tal cual.
Eso es lo que queremos solucionar.
Lo que tenemos que saber es si es un problema con la expresión regular, o simplemente es mejor usar el otro código, pero los códigos que tu estas aportando ahora mismo son equivalentes a ese, que como digo, tiene esa falla.
Saludos