替换<a> links to images with <img/> tags</a>

时间:2010-03-04 19:26:04

标签: php regex

我正在寻找一种方法来查找/替换图像链接(在用户生成的内容中),而无需触及非图像链接。

例如,以下文字:

<a href="http://domain.com/arbitrary-file.jpg">Text</a>
<a href="http://domain.com/arbitrary-file.jpeg">Text</a>
<a href="http://domain.com/arbitrary-path/arbitrary-file.gif">Text</a>
<a href="http://domain.com/arbitrary-file.png">Text</a>

<a href="http://domain.com/arbitrary-file.html">Text</a>
<a href="http://domain.com/arbitrary-path/">Text</a>
<a href="http://domain.com/arbitrary-file#anchor_to_here">Text</a>

Non-hyperlinked URL: http://domain.com/arbitrary-path/arbitrary-file.gif
Non-hyperlinked URL: http://domain.com/arbitrary-file#anchor_to_here

......应该修改为:

<img src="http://domain.com/image.jpg" alt="Text" />
<img src="http://domain.com/arbitrary-file.jpeg" alt="Text" />
<img src="http://domain.com/arbitrary-path/arbitrary-file.gif" alt="Text" />
<img src="http://domain.com/arbitrary-file.png" alt="Text" />

<a href="http://domain.com/arbitrary-file.html">Text</a>
<a href="http://domain.com/arbitrary-path/">Text</a>
<a href="http://domain.com/arbitrary-file.html#anchor_to_here">Text</a>

Non-hyperlinked URL: http://domain.com/arbitrary-path/arbitrary-file.gif
Non-hyperlinked URL: http://domain.com/arbitrary-file#anchor_to_here

......在PHP中安全可靠。

2 个答案:

答案 0 :(得分:7)

您可能希望查看使用HTML解析器(而不是正则表达式,因为您标记了提交),例如PHP Simple HTML DOM Parser。这将为您提供您所说的可靠性。

你最终可能会得到这样的结果:

foreach($html->find('a') as $element)
{
    echo '<img src="'.$element->href.'" alt="'.$element->innertext.'" />';
}

答案 1 :(得分:4)

没有可靠的方式来做到这一点,至少对正则表达式来说,但是这应该可以做到这一点:

$str = preg_replace('~<a[^>]*?href="(.*?(gif|jpeg|jpg|png))".*?</a>~', '<img src="$1" />', $str);

稍微打开一下:

  • 查找开放式<a代码
  • 在该标记内找到href属性
  • 获取href,如果它以列出的文件扩展名之一和"字符
  • 结束
  • 包括替换的其余部分,直到替换
  • 中的结束</a>标记
  • 将整个匹配替换为将href作为src属性
  • 的img元素

正如鲍尔所说,你最好使用DOM方法。但是,如果您可以确定您的链接始终采用此格式,则可以使用正则表达式。正则表达式也可能更快一些。