php - 如何通过在 php 中知道其 innerhtml 来获得字符串输出?
问题描述
我正在尝试获取<span>
包含文本“Bonkers”的元素之间产生的字符串结构。
例如:
<span> Bonkers </span>
或者
<span> Bonkers </span>
或者
<span> Bonkers </span>
问题是我不知道跨度结构,但我知道“疯子”会在那里。
我想返回整个文本字符串结构(包括 <span> 打开和关闭标签,以便稍后我可以替换它。例如:
$spanwithbonkers = '<span> Bonkers </span>';
到目前为止,这就是我所拥有的,但它不起作用:
<?php
$homepage = file_get_contents('http://www.example.com/');
preg_match('/^<span>^Bonkers^</span>/', $homepage, $matches);
$spanwithbonkers = $matches[0]);
?>
不确定是否应该使用 preg_match。
解决方案
比使用正则表达式解析 HTML 更好的方法是使用DOMDocument
andDOMXPath
类。您可以将 HTML 加载到文档中,然后使用 XPath 查找特定元素,然后处理这些元素。在您的情况下,我们Bonkers
通过比较text
每个跨度节点的值来找到包括单词的跨度,例如
$html = '<body><div><div><span id="b"> Bonkers </span></div></div>
<div><span> no bonk</span>
<span> This is bonkers!</span>
</div></body>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$spans = $xpath->query("//span[contains(text(), 'Bonkers')]");
foreach ($spans as $span) {
echo $span->C14N();
}
输出:
<span id="b"> Bonkers </span>
如果要进行不区分大小写的比较,则要复杂一些:
$spans = $xpath->query('//span');
foreach ($spans as $span) {
if (stripos($span->textContent, 'Bonkers') !== false) {
echo $span->C14N() . "\n";
}
}
输出
<span id="b"> Bonkers </span>
<span> This is bonkers!</span>
推荐阅读
- c# - 在 BizTalk 业务流程中处理 SOAP 异常
- javascript - 在这两个代码块中使用和省略关键字“await”有什么区别?
- c++ - 是否通过未定义的“函数”左值调用“noexcept 函数”?
- php - 从 PHP 循环组织 JSON
- python - 找到具有最大总和的从根到叶的路径 - 无法比较问题
- .net - .NET SSH 与证书身份验证
- python - Visual Studio 2019 Python 断点未命中
- java - 如何将字符串从变量写入文本文件
- python - 接受用户输入并使用它在 Django 中识别适当的 ForeignKey
- python - 将 set_row() 用于 xlsxwriter 时,如何让其包含第一列?