1

我经营一个邮寄网站。我设置了正则表达式来替换 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,我不希望替换链接。

我怎样才能做到这一点?

4

2 回答 2

0

Try this:

$body= preg_replace('~(?<!src=["\'])(?:www|http://)[^ ]+~', '[Link Removed]', $body);
于 2012-09-21T01:54:06.230 回答
0

我希望您知道与使用正则表达式处理 HTML 相关的问题?不幸的是,PHP 没有简单的替代方案

如果您使用否定的look-behind,您可以忽略src属性内的URL

此外,该www选项必须增强为(?<!/)wwwwww前面没有斜线)

这会做你想做的

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

但请注意,没有什么可以阻止字符引用被用作属性值的分隔符,因此图像可能看起来像

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

但显然这不太可能

于 2012-09-21T02:08:00.607 回答