【问题标题】:Writing regular expression in PHP to wrap <img> with <a> [duplicate]在 PHP 中编写正则表达式以用 <a> 包装 <img> [重复]
【发布时间】:2011-05-26 07:15:59
【问题描述】:

我想这样做,以便任何出现的图像都被包含到图像源的链接

我如何在 PHP 中编写一个模式,以便我可以找到这些变化,这些变化分散在来自数据库的文本中:

<img src='/dir/dir2/image1.jpg' alt='blah blah blah'>
<img src="/dir/dir2/image2.jpg" alt="blah blah blah" />
<img src="/dir/dir2/image3.jpg" />

在所有情况下,我都希望它们出现在链接中。

【问题讨论】:

  • 所以您将&lt;img src="A"/&gt; 转换为&lt;a href="A"&gt;&lt;img src="A"/&gt;&lt;/a&gt;
  • 必填:stackoverflow.com/questions/1732348/… :) (在你的情况下它可能是可以管理的,但 Cthulu 仍然适用。)

标签: php html regex


【解决方案1】:

preg_replace("{&lt;img\\s*(.*?)src=('.*?'|\".*?\"|[^\\s]+)(.*?)\\s*/?&gt;}ims", '&lt;a href=$2&gt;&lt;img $1src=$2 $3/&gt;&lt;/a&gt;', $str)

处理所有非实际案例

【讨论】:

  • 谢谢SHINKiROU,你是我的英雄
  • 啊啊啊啊!!!基于正则表达式的 HTML 解析!
  • 被窃听,正则表达式方法必然如此。此正则表达式在 &lt;img data-license-src="foo.com/LICENSE" src="foo.com/img1.png"/&gt; 上失败,它将链接到 Liecense 而不是图像。说真的,使用一个可怕的 html 解析器,比如 DOMDocument。
【解决方案2】:

我推荐使用 loadHTML() 而不是正则表达式的 PHP DOM?

http://php.net/dom

http://php.net/domdocument.loadhtml

【讨论】:

  • 这些网站很好用。
【解决方案3】:

我可以推荐使用 jQuery 并改用这个 sn-p,它应该更容易(我们都喜欢 jQuery 暴力破解任何问题;]

$('img').wrap( function(){ return '<a href="' + this.src + '"></a>'; });

还是

$('img').wrap( function(){ return '<a href="' + $(this).attr('src') + '"></a>'; });

不管怎样,玩得开心,使用 jQuery 来操作 DOM 客户端 ;)

【讨论】:

  • 我赞成其他两个实际使用 PHP 来解决问题,但说真的,像这样的 DOM 元素包装在 jQuery 中非常简单,您需要很少的努力,并且允许您更多如果您突然决定……例如,标题图像……不需要选择,请密切关注要“更改”的区域。我并不是说我的方法一定是要走的路,只是指出笨拙的解决方案有一些好处。
  • 相关:jQuery
猜你喜欢
  • 2014-07-13
  • 1970-01-01
  • 2014-04-23
  • 2012-06-13
  • 2010-12-18
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多