我经营一个邮寄网站。我设置了正则表达式来替换html电子邮件正文中的链接。
我用:
// 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 :(得分:0)
试试这个:
$body= preg_replace('~(?<!src=["\'])(?:www|http://)[^ ]+~', '[Link Removed]', $body);
答案 1 :(得分:0)
我希望您了解使用正则表达式处理HTML时遇到的问题?不幸的是,PHP没有简单的替代方案
如果您使用否定后视,则可以忽略src
属性
此外,必须将www
选项增强为(?<!/)www
(www
后面没有斜杠)
这将做你想要的事情
$body= preg_replace('_(?<!src=["\'])(?:http://|(?<!/)www)\S+_', '[Link Removed]', $body);
但请注意,没有什么可以阻止字符引用被用作属性值的分隔符,因此图像可能看起来像
<img src="http:www.mysite.com/image.png">
但很明显这不太可能