2012-12-09 10 views
5

Misja polega na zastąpieniu wszystkich tagów w danym ciągu za pomocą znaczników <div> i wartości src jako tekstu wewnętrznego. W poszukiwaniu odpowiedzi znalazłem similar questionPHP - zastąp znaczniki <img> i zwróć src

<?php 

    $content = "this is something with an <img src=\"test.png\"/> in it."; 
    $content = preg_replace("/<img[^>]+\>/i", "(image) ", $content); 
    echo $content; 

?> 

wynik:

this is something with an (image) in it. 

Pytanie: Jak zaktualizować skrypt Ant uzyskać ten wynik:

this is something with an <div>test.png</div> in it. 
+1

Nie chcą używać regexes do parsowania HTML. Nie są do tego zadania. Twoje rozwiązanie regex jest wyjątkowo delikatne. http://htmlparsing.com/regexes.html wyjaśnia, dlaczego. –

Odpowiedz

2
$content = "this is something with an <img src=\"test.png\"/> in it."; 
$content = preg_replace('/<img\s+src="([^"]+)"[^>]+>/i', '<div>$1</div>', $content); 
echo $content; 
+1

Nie powinieneś polegać na regex do parsowania/transformowania XML –

7

To jest rodzaj problemu, który PHP DOMDocument klasa wyróżnia się:

$dom = new DOMDocument(); 
$dom->loadHTML($content); 

foreach ($dom->getElementsByTagName('img') as $img) { 
    // put your replacement code here 
} 

$content = $dom->saveHTML(); 
+2

'$ img-> setAttribute ('src', $ new_src_url);' – Jake

0
$content = "this is something with an <img src=\"test.png\"/> in it."; 
$content = preg_replace('/(<)([img])(\w+)([^>]*>)/', '<div>$1</div>', $content); 
echo $content;