如何从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=""&gt;&lt;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 提要非常一致,但如果“某些文本”部分包含 " 标记,这会搞砸并且您会得到错误的字符串。

您可以在数组中查看以httpwww 开头的所有内容以解决错误,但同样,它需要非常一致的 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标签?的主要内容,如果未能解决你的问题,请参考以下文章

PHP/regex:如何获取 HTML 标签的字符串值?

从 html 文档中的合格 span 标签获取类值和文本

如何从html字符串中获取头部和身体标签作为字符串?

如何从流星模板事件中的 html 标签中获取文本?

PHP DOM获取nodevalue html? (不剥离标签)

如何使用PHP从元素中获取包含内容的所有标签[重复]