Alle img-Tags mit regulären Ausdrücken ermitteln

illu_regulaere_ausdrueckeMit diesem kleinen Trick können Sie alle src Werte von img-Tags über einen regulären Ausdruck mit PHP auslesen und ändern. Das ist hilfreich, wenn Sie einmal in viel HTML Code die URLs in dem img-Tag anpassen oder ändern müssen. Reguläre Ausdrücke machen es möglich.

Vielleicht kennen Sie das Problem? Sie möchten, dass in viel HTML Code, z.B. aus einer Datenbank, automatisch die src-Attribute an img-Tags angepasst werden. Sei es z.B., dass aus

<img src="/images/bild.jpg" alt="Ein Bild" /> automatisch <img src="http://www.testseite.de/images/bild.jpg" alt="Ein Bild" /> werden soll.

Jetzt sind Sie sich aber nicht sicher, ob sie wirklich nur valides HTML verwendet haben? Also es soll auch folgendes ersetzt werden:

<IMG src="test/images/bild.jpg" alt="Ein Bild" /> oder

<imG SRC='mein_blog/images/bild.jpg' alt="Ein Bild">

Folgende Zeilen PHP Code erledigen das gewünschte:


$old = "Alter HTML Code, etwa <img src="/images/bild.jpg" alt="Ein Bild" />
$neue_url = "http://www.testseite.de";
$pattern = '/(<img.+?src=)(["\']?)([^\'"]+?)([^\/]+)(\2.*?\/?>)/is';
$replace = "$1$2".$neue_url."$4$5";
$new = preg_replace($pcre, $replace, $old);

Zu dem Code gibt es noch eine kurze Erklärung. Das zweite Subpattern fängt das linke Quote-Zeichen auf, oder eben keins, wenn keins da ist – falls der HTML code nicht valide ist. Das dritte passt auf den Pfad und wird deshalb ersetzt. Das vierte Subpattern erfasst alles nach dem letzten Slash bis zum Ende des Dateinamens. ‘\2’ ist eine Rückreferenz (“back reference”) und passt auf exakt das gleiche Zeichen wie das zweite Subpattern, also ‘”‘, “‘” oder kein Zeichen. Der Rest versucht alle möglichen Arten von img-Tags zu erfassen: “<img …>”, “<img …/>” und “<img … />”.

So sollte es fuktioieren

This entry was posted in PHP Tricks and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *