我有一个HTML输出,我从一个RSS源拉动,这是somethig这样的:如何从PHP中的字符串获取html标记?
<div>
<p>
Some text
</p>
<iframe src="http://www.source.com"></iframe>
</div>
的问题是,我只需要iframe标签的ATTR“SRC”,有什么办法获得它与PHP?正则表达式可能?
在此先感谢!
我有一个HTML输出,我从一个RSS源拉动,这是somethig这样的:如何从PHP中的字符串获取html标记?
<div>
<p>
Some text
</p>
<iframe src="http://www.source.com"></iframe>
</div>
的问题是,我只需要iframe标签的ATTR“SRC”,有什么办法获得它与PHP?正则表达式可能?
在此先感谢!
我不是正则表达式的专家,但一个替代办法是对"
商标使用explode
并获得array[1]
这样的:
$rssFeed = '<div>
<p>
Some text
</p>
<iframe src="http://www.source.com"></iframe>
</div>';
$rssArray = explode('"', $rssFeed);
echo $rssArray[1];
这需要你的RSS提要很但一致的是,如果“某些文本”部分包含"
标记,则会发生混乱,并且您会得到错误的字符串。
您可以通过阵列查看以http
或www
开头的所有内容来解决错误,但同样需要非常一致的RSS提要,因此您必须为自己判断是否可以完成足够好的工作。
如果你一直想起来了,你上面列出的数据,你可以使用一个简单的字符串,使用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;
编辑 - 修复代码并分成多行。这可能很容易成为单线,但 - 认为如果我分成多行,就会更容易理解。
你可以用一个小命令行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");
我认为DOM文档将是一个小更强大的,如果HTML没有完全形成的SimpleXML。另外,我猜你必须单独处理RSS和它包含的HTML,因为HTML应该被编码成RSS的实体,才能正确。 – Endophage 2011-05-09 17:48:29
如果你只想要'src'属性,你就不需要更强大的*。在这种情况下,IMO,SimpleXML的*简单*性质是正确的。 – 2011-05-09 17:53:24
正如我所说,这是HTML我是担心无效的XML。看看这个SO帖子http://stackoverflow.com/questions/2890120/php-processing-invalid-xml如果你仍然认为这会比只使用DOMDocument自动纠正错误的HTML更容易。 – Endophage 2011-05-09 21:08:53