【问题标题】:regex remove link but not inside an img tag正则表达式删除链接但不在 img 标签内
【发布时间】:2012-09-21 01:04:47
【问题描述】:

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

我怎样才能做到这一点?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    试试这个:

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

    【讨论】:

      【解决方案2】:

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

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

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

      这会做你想做的事

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

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

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

      但显然这不太可能

      【讨论】:

      • 好人!谢谢!正则表达式对我来说就像中文,我没有足够的中文来学习它!两种方式都适合我的目的;-) 感谢您的宝贵时间!包括@xdazz
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 2014-08-26
      • 2012-01-12
      • 1970-01-01
      相关资源
      最近更新 更多