href src containg ile img etiketi sarmak için regex

3 Cevap php

[Edited - Sorry Bart] I've looked at other answers but struggling to match this. I want to wrap an image tag where the src is the second attribute (after title) with a specific anchor tag that contains a link to the image found in the src from the image tag.

Dizesinde etiketi img örneği. Bu TinyMCE WYSIWYG üzerinden girildiğini ve her başlık src sonra ekler.

<img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" alt="who_main_Layer_1.jpg" width="380" height="268" />

Ben tüm bu almak ve aşağıdaki href ile sarmak gerekir:

<a href="event:images/expand/image.jpg"><img src=”images/image.jpg” /></a>

Küçük resminin görüntü src noktaları ve (Flaş AS3 Olay) tam boyutlu sürümünü açılır. Her iki görüntü aynı sadece farklı klasörler adında.

İşte (! Nedeniyle hassas verilere Ben Lorem ipsum metnini ikame ettik, ama düzen aynı) karşı çalışan regex gerekir bir dize tam bir örneğidir:

<p>Lorem ipsum dolor sit amet</p>
<p>&nbsp;</p>
<p>Lorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit  
ametLoremipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem 
ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit amet</p>
<p>&nbsp;</p>
<p><img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" 
alt="who_main_Layer_1.jpg" width="380" height="268" /></p>
<p>&nbsp;</p>
<p>Lorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem 
ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum 
dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor 
sit  
ametLorem ipsum dolor sit ametLorem ipsum dolor sit amet</p>
<p>&nbsp;</p>
<p><img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" 
alt="who_main_Layer_1.jpg" width="380" height="268" /></p>`

Many thanks in advance, Marc

3 Cevap

Bu kodu deneyin:

<?php
$str = '<img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" alt="who_main_Layer_1.jpg" width="380" height="268" />';

preg_match('#src="(?:.*/)?(.*?)"#', $str, $match);
$src = $match[1];
?>
<a href="event:images/expand/<?php echo $src; ?>"><img src=”images/<?php echo $src; ?>” /></a>

EDIT: dize birden etiketleri için hesap için başka bir versiyonu:

$replace = '<a href="event:images/expand/$1"><img src="images/$1" /></a>';
$str = preg_replace('#<\s*img.*?src="(?:[^"]+/)?(.*?)".*?>#s', $replace, $str);

Benzer soruları birkaç kez cevap olmuştur ve cevap hep aynıdır: do not use regular expressions to tamper with HTML. PHP olarak, XPath kullanabilir ve SimpleXml veya DOMParser uzantıları bu sorunu çözmek için.

Çok kendi yanıtlarını link ama cevapları kendilerini ve konuyla ilgili birçok bilgi içeren yanıtlayan edilir soruları gönderme için üzgünüm.

Bu deneyin:

$newString = preg_replace('`<img([^>]*)src="\\.\\./\\.\\./images/([^"]+)"([^>])*>`','<a href="event:images/expand/$2"><img$1src="images/$2"$3></a>', $oldString);

Sınırlamalar şunlardır:

  • Bu <input value='<img src="../../images/test.jpg/>"'/> gibi şeyler değişiklikleri uygulamak olacaktır
  • " sizin img etiketleri ' ile değiştirilir iseniz, regexpi değiştirmeniz gerekecek
  • Bu <img alt="6>5" src="../../images/test.png"/> gibi şeyler üzerinde şok olacaktır

Ben sıradanifade HTML ayrıştırmak için kötü olduğunu söyleyerek diğer Commenters katılıyorum. Ama neredeyse hiçbir ayrıştırma burada ve yerine şeylerin biçimi (TinyMCE tarafından oluşturulan) kontrol altında gibi görünüyor.