如何从PHP中的字符串中获取html标签?

时间:2011-05-09 17:39:59

标签: php html dom iframe

我有一个html输出我正在从RSS提要中提取,它是这样的事情:

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

问题是我只需要iframe标签的attr“src”,有没有办法用PHP获取它?可能是正则表达式?

提前致谢!

4 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:2)

我建议DOMDocumentSimpleXML

这样的事情可能会给你这个想法。

var_dump(simplexml_load_string($rss_feed));

答案 2 :(得分: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源非常一致,如果“Some text”部分包含"标记,这会搞砸,你会得到一个错误的字符串。

你可以通过数组查看以httpwww开头的所有内容来解决错误,但同样需要一个非常一致的RSS提要,所以你必须自己判断一下会做得很好。

答案 3 :(得分: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");