2010-06-28 5 views
1

Disons que j'ai une chaîne contaning balises HTML avec beaucoup de balises img qui ressemblent à ceci:Regex pour modifier le format de tous les attributs src img

<img src="data/images/original/3.png" alt="" /> 

je besoin d'une expression régulière qui changerait toutes les images d'avoir des chemins comme ceci:

<img src="/utils/locate-image?path=data%2Fmedia%2Fimages%2Foriginal%2F3.png" alt="" /> 

Je ne suis pas très bon avec l'expression régulière donc j'apprécierais un exemple de code qui peut faire cela?

Répondre

3

N'utilisez pas d'expressions régulières pour cela. L'analyseur Simple HTML DOM devrait être parfait pour le travail.

Il devrait être aussi facile que cela:

foreach($html->find('img') as $e) { 
    $e->src = "insert modified src here"; 
} 

echo $html; 
+0

Mais il ne sera pas plus lent avec HTML DOM? –

+6

Peut-être. Voulez-vous rapide ou correct? –

+1

Ce serait '$ e-> src = '/ utils/locate-image? Path ='. urlencode ($ e-> src); 'est deviner. – jensgram

6

Ne pas utiliser des expressions régulières pour cela. PHP's native DOM parser devrait être parfait pour le travail.

$dom = new DOMDocument; 
$dom->loadHTML('<img src="foo" alt=""/>'); 
$images = $dom->getElementsByTagName('img'); 
foreach($images as $image) { 
    $image->setAttribute('src', 'bar'); 
    echo $dom->saveXML($image); 
} 

échos <img src="bar" alt=""/>

+3

+1 (malgré les violations flagrantes des droits d'auteur dans le 1er paragraphe! :) car il ne nécessite pas de bibliothèque externe. –

+0

@Pekka me poursuivre: D – Gordon

+0

pouvez-vous dire * "Abmahnung" *? : D –

Questions connexes