如何从PHP中的字符串中提取URL?

时间:2009-07-24 14:36:13

标签: php simplexml flickr

我正在使用PHP的“simplexml_load_file”从Flickr获取一些数据。

我的目标是获取照片网址。

我能够获得以下值(分配给PHP变量):

<p><a href="http://www.flickr.com/people/19725893@N00/">codewrecker</a> posted a photo:</p>

<p><a href="http://www.flickr.com/photos/19725893@N00/2302759205/" title="Santa Monica Pier"><img src="http://farm3.static.flickr.com/2298/2302759205_4fb109f367_m.jpg" width="180" height="240" alt="Santa Monica Pier" /></a></p>

我如何才能提取这部分内容?

http://farm3.static.flickr.com/2298/2302759205_4fb109f367_m.jpg

以防它有用,这是我正在使用的代码:

<?php
$xml = simplexml_load_file("http://api.flickr.com/services/feeds/photos_public.gne?id=19725893@N00&lang=en-us&format=xml&tags=carousel");
foreach($xml->entry as $child) {
    $flickr_content = $child->content; // gets html including img url
    // how can I get the img url from "$flickr_content"???
 }
?>

4 个答案:

答案 0 :(得分:6)

你可以放弃使用正则表达式,假设HTML的形成方式几乎保持不变,例如:

if (preg_match('/<img src="([^"]+)"/i', $string, $matches)) {
    $imageUrl = $matches[1];   
}

这非常不健壮,如果HTML会发生变化(例如<img>标签中参数的顺序,HTML格式错误的风险等等),最好使用HTML解析器

答案 1 :(得分:1)

这不是解决你的问题(也可能是完全矫枉过正),但值得一提的是因为我在2个项目中使用了这个库而且编写得很好。

phpFlickr - http://phpflickr.com/

答案 2 :(得分:0)

简单方法:substr和strpos的组合首先提取标签,然后提取src ='...'值,最后提取目标字符串。

稍微困难一点(但更强大):使用XML解析库,例如simpleXML

答案 3 :(得分:0)

我希望这会有所帮助。我喜欢使用xpath来切换我从SimpleXML中获取的XML:

<?php
$xml = new SimpleXMLElement("http://api.flickr.com/services/feeds/photos_public.gne?id=19725893@N00&lang=en-us&format=xml&tags=carousel", NULL, True);
$images = $xml->xpath('//img');  //use xpath on the XML to find the img tags

foreach($images as $image){  
    echo $image['src'] ;  //here is the image URL
}
?>