HTML etiketleri görüntü src Değiştirme?

2 Cevap php

I src html özelliklerini değiştirmek için regex kullanmak istiyorum. HTML biçimlendirilmiş değil ve neyse veritabanındaki tüm sayfalarda aynı şeklini alır - yani

<img src="http://x.y/z/1.png" />

Ben sadece bir görüntü sayfada varsa çalışıyor kodu var. Ben bu aynı dize ile tüm görüntü etiketleri değiştirmek gibi, birden çok görüntü değiştirmek için en iyi yolu bilmek istiyorum.

$result = $s->db_query("SELECT reviewFullText as f FROM reviews WHERE reviewsID = 155");
while($row = mysql_fetch_array($result))
{
    $body = stripslashes(html_entity_decode($row['f'], ENT_NOQUOTES, "UTF-8"));
    preg_match_all('/<img.*?(src\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', $body, $matches);
    for($i=0;$i<count($matches[0]);$i++)
    {
    	$number = preg_replace("/[^0-9]/", '', $matches[0][$i]);
    	echo preg_replace('/<img.*?(src\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', '<img src="http://x.y/a/' . $number . '.png"', $matches[0][$i]);
    }
}

Yani sayfa iki dosya, 1.png denilen bir ve komut numaralarını ayrıştırmak ve bu http://x.y/a/1.png ve http://x.y/a/2.png gibi farklı bir url ile bunları değiştirmeniz gerekir 2.png diye bir tane varsa.

I preg_replace_callback bunu yapmak için en iyi yoldur ama bu çalışma almak için nasıl hiçbir fikrim yok ... Yardım duydum!

2 Cevap

Don't use regular expressions for irregular languages like HTML. Bunun yerine, bir parser kullanın. Bu size zaman ve acı bir sürü kazandıracak.

# Untested code:
$xml = new SimpleXml($xmlString);
foreach ($xml->xpath('//img') as $imgNode) {
    $imgNode->addAttribute('src', "http://x.y/a/" . $imgNode->getAttribute('src'));
}
echo $xml->asXML();

Html xhtml (yani geçerli xml) değil, ama fikir aynı kalır eğer, DOMDocument::loadHtml() gibi bir şey gerekir unutmayın.

Lütfen regex genel bayrağını yerine "g" ekleyin.

'/ Your_regex / i ** g **'

Soulmerge önerildiği gibi html (Ben bunu iyi biçimli XML demek varsayıyorum) hatalı biçimlendirilmiş olmadığından, bir XSLT dönüşümü çok belgenizdeki bir şey değiştirmek için etkili bir yol olacaktır. Sen @ src niteliği üzerinde maç ve gereksinimleri başı olarak değiştirebilir.

Eğer aynı anda belgenin diğer bazı bölümlerini değiştirmek gerekiyorsa da diğer herhangi bir etiket / niteliklerini maç olabilir.