EisFuX: preg_replace()

Beitrag lesen

Hallo theresa,

ich möchte alle bildpfade innerhalb eines dokumentes via search/replace ersetzen, hab aber keine idee wie ich das machen soll. ich muss nämlich nicht nur den pfad ändern, sondern auch den dateinamen eines bildes.
ich hab z.b. im original:
<img src = "../bilder/21312312_gans.jpg"> und
und daraus soll werden:
<img src = "http://www.domain.de/bilder/gans.jpg"> und <img src = "http://www.domain.de/bilder/henne.jpg">

mit ereg_replace kann ich den basispfad tauschen, aber wie soll ich die dateinamen ändern?

Ich würde für sowas besser preg_replace() benutzen. Es funktioniert so ähnlich wie ereg_replace() benutzt aber eine etwas andere Art von Regulären Ausdrücken für die Suchmuster. Nebenbei ist es schneller.

  
// beispiel  
$alt = '<img src = "../bilder/21312312_gans.jpg"> <img src = "../bilder/9821374_henne.jpg">';  
$rx = '/(\<img[^>]+src\s*=\s*")(\.\.)(\/[^"]+\/)(\d+\_)([^"]+"[^>]*\>)/';  
$rpl = '$1http://www.domain.de$3$5';  
  
$neu = preg_replace($rx, $rpl, $alt);  
  
printf('%s', htmlspecialchars($neu));  

'/)(\d+\_)([^"]+"'
Das Script geht davon aus, dass der Dateiname der Teil der Zeichenkette ist, der innerhalb des Pfades nach dem letzten Slash steht.

'(<img[^>]+src\s*=\s*")'...'([^"]+"[^>]*>)'
Der Pfad wiederum ist der Teil der Zeichenkette, der innerhalb des <img>-Tags im src-Attribut zwischen den doppelten Hochkommas steht.

'(\d+\_)'
Der Dateiname wird so geändert, dass die führenden Zahlen und der darauffolgende Unterstrich entfernt werden.

MffG
EisFuX