如何从php中的字符串获取html标签?
Posted
技术标签:
【中文标题】如何从php中的字符串获取html标签?【英文标题】:How to get html tag from string in php? 【发布时间】:2011-08-21 21:07:21 【问题描述】:我有一个从 RSS 提要中提取的 html 输出,它是这样的:
<div>
<p>
Some text
</p>
<iframe src="http://www.source.com"></iframe>
</div>
问题是我只需要 iframe 标签的 attr "src",有没有办法用 php 来获取它?可能是正则表达式?
提前致谢!
【问题讨论】:
【参考方案1】:如果您始终只获得上面列出的数据,则可以使用简单的子字符串,使用 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;
EDIT - 修复代码并拆分为多行。这很容易成为单行,但是 - 认为如果我分成多行更容易理解。
【讨论】:
【参考方案2】:我推荐DOMDocument 或SimpleXML。
这样的事情可能会给你这个想法。
var_dump(simplexml_load_string($rss_feed));
【讨论】:
如果 HTML 的格式不完美,我认为 DOMDocument 会比 SimpleXML 更健壮一些。另外,我猜你必须分别处理 RSS 和它包含的 HTML,因为 HTML 应该被编码为实体以使 RSS 正确。 如果您只需要src
属性,则不需要更强大的。 IMO,SimpleXML 的 simple 特性在这种情况下是正确的。
正如我所说,我担心的是 HTML 是无效的 XML。如果您仍然认为这比仅使用自动更正错误 HTML 的 DOMDocument 更容易,请查看此 SO 帖子 ***.com/questions/2890120/php-processing-invalid-xml。【参考方案3】:
我不是正则表达式专家,但另一种方法是在 "
标记上使用 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 提要,因此您必须自己判断这是否可以完成工作足够好。
【讨论】:
【参考方案4】:你可以用一个小的命令行 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");
【讨论】:
以上是关于如何从php中的字符串获取html标签?的主要内容,如果未能解决你的问题,请参考以下文章