HTML metni tüm resim src etiketlerini değiştirme

6 Cevap php

Ben bir html metin tüm görüntüleri tüm src özelliklerini bulmak ve daha sonra bazı koşullu değişiklikleri yaptıktan sonra bazı metin bulunan tüm SRCs yerine basit bir php komut dosyası yapmak için çalışıyorum.

Böyle bir şey:

@preg_match_all('/<img\s src="([a-zA-Z0-9\.;:\/\?&=_|\r|\n]{1,})"/isxmU', $body, $images);

şimdi $ görüntüleri değişkeni içine SRCs ettik, şimdi ben yapmak:

foreach ($images as $img) {
    ..my changes here..
}

ve şimdi ... nasıl i değiştirilen SRCs tekrar $ vücut değişkene geri yükleyebilirsiniz?

şimdiden çok teşekkürler,

6 Cevap

Çok daha kolay http://simplehtmldom.sourceforge.net/ kullanmak ve korumak, yerine bir HTML DOM ayrıştırıcı kullanın

Sen buna ek olarak, preg_replace_callback() , which will allow you to postprocess each match however you like, using a callback function. (You would use it instead of your preg_match_all() içine bakmak gerekir.)

I asked a question yesterday HTML dosyalarını değiştirerek geçme için iyi bir arabirimi hakkında. Bu ilginizi çekebilir:

jQuery port to PHP

Zaten jQuery API ile aşina iseniz bu iyi bir alternatif olabilir.

Eğer kötü oluşturulan HTML ile çalışmak gerekiyorsa olmayan bir doğrulanırken ayrıştırıcı daha da iyi olabilir.

http://pear.php.net/package/XML%5FHTMLSax3

Ne istediğinizi kullanmaktır etmeyin preg_replace? Ile e yerine metin eval 'öylesine yapmak bir işleve sahip olabilir d olan niteleyici text-to-yerini-Eğer yapardı aynı şeyi senin foreach döngü.

EDIT: preg_replace_callback preg_replace, benim anser yazarken düşünmemiştim, yani kaos cevap daha iyi değil mi ile e değiştirici kullanarak daha temizdir.

Ben aradığınız en kolay cevap str_replace yapmak olduğunu düşünüyorum.

foreach ($images as $img) {
    ..my changes here..
    $body = str_replace($original_string, $modified_string, $output_body);
}