我几乎拥有它,但它不能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;
}
}
?>
如何确保该功能仅返回图像URL?
答案 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。