hola... estuve practicando con tu idea, y logre esto... sin extensiones DOM
Código PHP:
<?php
// parser "DOM"
function c_img($str, $args = array(), $rem = null)
{
$expr = '/<img([^>]*)\/?>/ie'; // regex
// usamos un callback para el reemplazo
$str = preg_replace($expr, '__call_c_img("\\1", $args, $rem);', $str);
return $str;
}
function __call_c_img($m,$z,$p)
{
// regex para los atributos...
preg_match_all('/([a-z0-9:_-]+)=([\'\"])(.+?)\\2/', $m, $a);
$args = array();
foreach ($a[1] as $i => $attr)
{
// construimos array
$args[$attr] = $a[3][$i];
}
$out = null; // atributos
//
$q = explode('|', $p);
$z = array_merge($args,$z);
foreach ($z as $key => $val)
{
if ( ! in_array($key, $q))
{
// indice="valor"
$out .= ' ' . $key . '="' . $val . '"';
}
}
// salida HTML
return "<img$out/>";
}
$variable = '...Texto.....
<img src="img/imagen.gif" width="152" height="212" />
....Más Texto....';
// el segundo argumento es un array con los atributos
// a cambiar, o añadir ....
echo c_img($variable, array('width' => 50, 'height' => 50));
// con el tercer argumento, omitimos atributos específicos
// ejemplo...
echo c_img($variable, array('width' => 50), 'height|alt|title');
tan solo es un ejemplo, para la etiqueta <img/>, pero sin duda con un poco de OOP y creatividad se puede aplicar a cualquier etiqueta tipo XML
espero te sirva de algo, suerte!