除了字符串PHP中的图像src URL之外的所有内容

时间:2018-04-23 22:12:18

标签: php html

我几乎拥有它,但它不能100%工作。我想从字符串中删除所有内容并仅返回图像URL。如果字符串有多个图像,那么它将用逗号“,”分隔图像URL。 I started with this answer并且做到了这一点:

示例字符串(这会改变,但我需要的是带有逗号分隔符的图像URL,如果有多个)

<table border="0" cellpadding="8"><tr><td width="80px"><a href="https://www.ebay.com/itm/Vintage-Elegant-Clear-Glass-Light-Shade-Ceiling-3-holes-Large-Flower/183189652718?hash=item2aa6f444ee:g:ji8AAOSwzpFa20P3"><img border="0" src="https://i.ebayimg.com/thumbs/images/g/ji8AAOSwzpFa20P3/s-l225.jpg"></a></td><td><div><span><strong>$15.00</strong></span></div><div>End Date: <span>May-21 07:03</span></div><div>Buy It Now for only: US $15.00</div><a href="https://www.ebay.com/itm/Vintage-Elegant-Clear-Glass-Light-Shade-Ceiling-3-holes-Large-Flower/183189652718?hash=item2aa6f444ee:g:ji8AAOSwzpFa20P3">Buy it now</a><span> | </span><a href="http://cgi1.ebay.com/ws/eBayISAPI.dll?MfcISAPICommand=MakeTrack&item=183189652718&ssPageName=RSS:B:SHOP:US:104">Add to watch list</a></td></tr></table>

PHP:

<?php
function getImageUrlFromEbay($content = null) {
    if( !empty($content)){
        $imgSrc = preg_replace("/(<img\\s)[^>]*(src=\\S+)[^>]*(\\/?>)/i", "$1$2$3", $content);  
        return $imgSrc;
    }
}
?>

这是我当前函数返回的预览: enter image description here

如何确保该功能仅返回图像URL?

1 个答案:

答案 0 :(得分:2)

使用正则表达式(假设有效的HTML)执行此操作的粗略方法是:

if (preg_match_all('/<img .*?src=[\'"]([^\'"]+)/i', $str, $matches) > 0) {
    $images = implode(',', $matches[1]);
} else {
    $images = '';
}

返回$matches[1]数组可能比逗号分隔的字符串更好。理论上,URL可以包含逗号。

不是过滤掉HTML而不是图像src的一部分,而只是匹配src。