2011-05-09 60 views
2

我有一个HTML输出,我从一个RSS源拉动,这是somethig这样的:如何从PHP中的字符串获取html标记?

<div> 
    <p> 
     Some text 
    </p> 
    <iframe src="http://www.source.com"></iframe> 
</div> 

的问题是,我只需要iframe标签的ATTR“SRC”,有什么办法获得它与PHP?正则表达式可能?

在此先感谢!

回答

2

我推荐DOMDocumentSimpleXML

像这样的东西可能会给你的想法。

var_dump(simplexml_load_string($rss_feed)); 
+1

我认为DOM文档将是一个小更强大的,如果HTML没有完全形成的SimpleXML。另外,我猜你必须单独处理RSS和它包含的HTML,因为HTML应该被编码成RSS的实体,才能正确。 – Endophage 2011-05-09 17:48:29

+0

如果你只想要'src'属性,你就不需要更强大的*。在这种情况下,IMO,SimpleXML的*简单*性质是正确的。 – 2011-05-09 17:53:24

+0

正如我所说,这是HTML我是担心无效的XML。看看这个SO帖子http://stackoverflow.com/questions/2890120/php-processing-invalid-xml如果你仍然认为这会比只使用DOMDocument自动纠正错误的HTML更容易。 – Endophage 2011-05-09 21:08:53

0

我不是正则表达式的专家,但一个替代办法是对"商标使用explode并获得array[1]这样的:

$rssFeed = '<div> 
    <p> 
     Some text 
    </p> 
    <iframe src="http://www.source.com"></iframe> 
</div>'; 

$rssArray = explode('"', $rssFeed); 

echo $rssArray[1]; 

这需要你的RSS提要很但一致的是,如果“某些文本”部分包含"标记,则会发生混乱,并且您会得到错误的字符串。

您可以通过阵列查看以httpwww开头的所有内容来解决错误,但同样需要非常一致的RSS提要,因此您必须为自己判断是否可以完成足够好的工作。

3

如果你一直想起来了,你上面列出的数据,你可以使用一个简单的字符串,使用src=""><iframe字符串位置来指定子串你想要的:

$html = '<div><p>Some text</p><iframe src="http://www.source.com"></iframe></div>'; 

$start = strpos($html, 'src="') + 5; 
$length = strpos($html, '"></iframe') - $start; 
$src = substr($html, $start, $length); 

echo $src; 

编辑 - 修复代码并分成多行。这可能很容易成为单线,但 - 认为如果我分成多行,就会更容易理解。

0

你可以用一个小命令行perl脚本解析这个输出。这可以是相当强大的,这取决于你制作正则表达式的一般程度。

例如,

$command = "echo your_html_output | perl -pe 's/src=\"(.*)\"/$1/'"; # Capture what is in between src=" and the " (the closing quote)

$output = shell_exec("$command");

相关问题