2010-03-07 7 views
1

Je voudrais convertir une balise de lien normale dans une balise d'image,Convertir lien standard pour lien d'image

Comment puis-je convertir ce qui suit,

<a href="images/first.jpg">This is an image.</a> 

<a href="images/second.jpg">This is yet another image.</a> 

<a href="images/third.jpg">Another image.</a> 

cela avec php,

<img src="dir/images/first.jpg">This is an image. 

<img src="dir/images/second.jpg">This is yet another image. 

<img src="dir/images/third.jpg">Another image. 

Il peut y avoir un nombre quelconque de liens dans la source.

Merci.

+0

inb4 utilise un analyseur HTML. – zneak

Répondre

1

Utilisation regex:

$text = preg_replace('^<a href="(.+)">(.+)</a>^', '<img src="dir/$1">$2', $text); 

Sortie:

<img src="dir/images/first.jpg">This is an image. 

    <img src="dir/images/second.jpg">This is yet another image. 

    <img src="dir/images/third.jpg">Another image. 
1

Avec str_replace il devrait être

$source = str_replace('<a href="images/', '<img src="dir/images/', $source); 

et

$source = str_replace('</a>', '', $source); 
0

Depuis <a> balises ne peuvent pas être imbriquées, et si vous êtes prêt à le faire échouer dans certains cas limites, vous pouvez utiliser régulièrement expressions à un degré assez sûr ici.

$text = '<a href="images/first.jpg">This is an image.</a> 
<a href="images/second.jpg">This is yet another image.</a> 
<a href="images/third.jpg">Another image.</a>'; 

$text = preg_replace('#<a.+?href="([^"]+)".*?>(.+?)</a>#i', '<img src="dir/\1" alt="">\2', $text); 
echo $text; 

Cela donne:

<img src="dir/images/first.jpg" alt="">This is an image. 
<img src="dir/images/second.jpg" alt="">This is yet another image. 
<img src="dir/images/third.jpg" alt="">Another image. 
1

Avec un HTML-analyseur:

<?php 

$content = '<a href="images/first.jpg">This is an image.</a> 

<a href="images/second.jpg">This is yet another image.</a> 

<a href="images/third.jpg">Another image.</a>'; 

$html = new DOMDocument(); 

$html->loadHTML($content); 

$links = $html->getElementsByTagName('a'); 

$new_html = new DOMDocument(); 

foreach($links as $link) { 
    $img = $new_html->createElement('img'); 
    $img->setAttribute('src', 'dir/'.$link->getAttribute('href')); 
    $new_html->appendChild($img); 
    $new_html->appendChild($new_html->createTextNode($link->nodeValue)); 
} 


echo $new_html->saveHTML();