2012-09-21 106 views
1

我運行郵件網站。我設置了正則表達式來替換html郵件正文中的鏈接。正則表達式刪除鏈接,但不在img標籤內

我用:

// remove entire anchors 

$body=preg_replace('/<a[^>]*>(.*)<\/a>/iU','[Link Removed]', $body); 

// remove links not wrapped in an anchor tag 

$body= preg_replace('!((?:www|http://)[^ ]+)!', '[Link Removed]', $body); 

我的問題是,當有放置在HTML的圖像。當然,img src會被[Link Removed]取代,電子郵件中會顯示一張破碎的圖像。如果它是圖像的src,我不希望鏈接被替換。

我該如何做到這一點?

回答

0

試試這個:

$body= preg_replace('~(?<!src=["\'])(?:www|http://)[^ ]+~', '[Link Removed]', $body); 
0

我希望你瞭解與處理HTML使用正則表達式有關的問題?不幸的是PHP有一個src屬性

另外www選項被增強,從而(?<!/)wwwwww不是由斜線)

內沒有簡單的替代

如果您使用負向後看,你可以忽略的網址

這會做你想要

$body= preg_replace('_(?<!src=["\'])(?:http://|(?<!/)www)\S+_', '[Link Removed]', $body); 

但是請注意,沒有什麼可以阻止字符引用被用作分隔符的什麼ttribute值,因此圖像可能看起來像

<img src=&#34;http:www.mysite.com/image.png&#34;> 

,但顯然這是不可能的

+0

優秀的傢伙!謝謝!正則表達式對我來說就像中文,我不會用中文來學習它!兩種方式都適合我的目的;-)我感謝你的時間!包括@xdazz – user1687533

相關問題