Estás usando mal la expresión, en tanto que no estás considerando que, por defecto, la expresión coincide con la mayor cadena posible (lo que se llama
greedy match).
Para que esto no suceda, tenés que usar el modificador U al final del patrón:
http://www.php.net/pcre http://www.php.net/manual/es/referen...ern.syntax.php http://www.php.net/manual/es/referen....modifiers.php
Así que, el patrón debería ser
Código:
preg_replace('|(<img.*>)|U', "<p>$1</p>", $contenido);
O, también podés usar el modificador ? para indicarle al cuantificador * que debe coincidir con la menor cadena posible:
Código:
preg_replace('|(<img.*?>)|', "<p>$1</p>", $contenido);
Saludos.