<?php
// Modificar enlaces que contienen una imagen
// https://es.stackoverflow.com/q/90027/127
//Un HTML de ejemplo
$html = '
<a href="https://i.stack.imgur.com/mOJ0a.png">
<span>Enlace a la misma URL de la imagen</span>
<img src="https://i.stack.imgur.com/mOJ0a.png" />
</a>
<span>Imagen independiente precedida por un </span>
<a href="https://i.stack.imgur.com/mOJ0a.png">enlace</a>
<img src="https://i.stack.imgur.com/mOJ0a.png" />
<a href="./">
<span>Enlace a una URL diferente que la imagen</span>
<img src="https://i.stack.imgur.com/mOJ0a.png" />
</a>
';
//Englobamos en body
$html = "<body>$html</body>";
//Generar el DOM
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_COMPACT | LIBXML_HTML_NOIMPLIED | LIBXML_NONET | LIBXML_HTML_NODEFDTD);
//Obtener todos los enlaces
$a_nodelist = $dom->getElementsByTagName('a');
//Recorrer cada uno
foreach ($a_nodelist as $enlace) {
//Obtener la primera imagen dentro del enlace
$img = $enlace->getElementsByTagName('img')->item(0);
if ($img) { //si tiene imagen
//Comparar el enlace con la imagen
$urlEnlace = $enlace->getAttribute('href');
$urlImagen = $img->getAttribute('src');
if ($urlEnlace == $urlImagen) {
//Si son el mismo, reemplazar
$enlace->parentNode->replaceChild($img, $enlace);
}
}
}
//imprimir el resultado
echo $dom->saveHTML();
<body>
<img src="https://i.stack.imgur.com/mOJ0a.png">
<span>Imagen independiente precedida por un </span>
<a href="https://i.stack.imgur.com/mOJ0a.png">enlace</a>
<img src="https://i.stack.imgur.com/mOJ0a.png">
<a href="./">
<span>Enlace a una URL diferente que la imagen</span>
<img src="https://i.stack.imgur.com/mOJ0a.png">
</a>
</body>
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
<body>
<img src="https://i.stack.imgur.com/mOJ0a.png">
<span>Imagen independiente precedida por un </span>
<a href="https://i.stack.imgur.com/mOJ0a.png">enlace</a>
<img src="https://i.stack.imgur.com/mOJ0a.png">
<a href="./">
<span>Enlace a una URL diferente que la imagen</span>
<img src="https://i.stack.imgur.com/mOJ0a.png">
</a>
</body>