我正在寻找一种方法来查找/替换图像链接(在用户生成的内容中),而无需触及非图像链接。
例如,以下文字:
<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中安全可靠。
答案 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
代码"
字符</a>
标记
正如鲍尔所说,你最好使用DOM方法。但是,如果您可以确定您的链接始终采用此格式,则可以使用正则表达式。正则表达式也可能更快一些。