如何在PHP简单HTML DOM解析器中格式化明文?

如何在PHP简单HTML DOM解析器中格式化明文?,php,html,web-scraping,simple-html-dom,Php,Html,Web Scraping,Simple Html Dom,我正在尝试以纯文本形式提取网页的内容,而不使用html标记。下面是一些示例代码: $dom = \Sunra\PhpSimple\HtmlDomParser::file_get_html($url); $result['body'] = $dom->find('body', 0)->plaintext; 问题是,$result['body']中的内容非常混乱。当然,HTML被删除了,但是句子经常合并到其他句子中,因为没有空格或句点来分隔一个HTML标记的文本的结束位置,而下面标记的

我正在尝试以纯文本形式提取网页的内容,而不使用html标记。下面是一些示例代码:

$dom = \Sunra\PhpSimple\HtmlDomParser::file_get_html($url);
$result['body'] = $dom->find('body', 0)->plaintext;
问题是,$result['body']中的内容非常混乱。当然,HTML被删除了,但是句子经常合并到其他句子中,因为没有空格或句点来分隔一个HTML标记的文本的结束位置,而下面标记的文本的开始位置

例如:

<body>
    <div class="H2">Header</div>
    <div class="P">this is a paragraph</div>
    <div class="P">this is another paragraph</div>
</body>
但是当div嵌套时会出现问题,因为它会添加父对象的内容,其中包括来自所有子对象的文本,然后添加子对象的内容,从而有效地复制文本。不过,只需检查
$text
中是否有
即可解决此问题

也许我应该试试。

试试下面的代码:

$result = array();
foreach($html->find('div') as $e){
    $result[] = $e->plaintext;
}
请尝试以下代码:

$result = array();
foreach($html->find('div') as $e){
    $result[] = $e->plaintext;
}

可能是这样的吗?测试


可能是这样的吗?测试


你的问题有点不清楚。通过删除HTML标记,您在某种程度上删除了文本中的格式,但实际上您需要以更精确的方式定义其他类型的格式。您希望对文本应用哪种操作?你想要的结果是什么?我已经添加了一个例子来澄清你的问题有点不清楚。通过删除HTML标记,您在某种程度上删除了文本中的格式,但实际上您需要以更精确的方式定义其他类型的格式。您希望对文本应用哪种操作?您想要的输出是什么?我已经添加了一个澄清的示例,它产生了这样的结果:“header这是一个段落,这是另一个段落。”您可以将所有div作为数组element@cohaven我认为我更新的代码会对你有所帮助,它会产生这样的结果:“header这是一个段落,这是另一个段落。”可以将所有div作为数组获取element@cohaven我认为我的更新代码将有助于您回答最初的问题,尽管还有一些细微差别,比如嵌套div,这不会很好地处理,但这不是原始HTML示例的一部分,因此可以认为它超出了范围。对于嵌套div,您可以向数组映射添加一个嵌套的数组映射,并执行相同的操作。回答了最初的问题,虽然还有一些细微差别,例如嵌套div,但这不会很好地处理,但这不是原始HTML示例的一部分,因此可以认为它超出了范围。对于嵌套div,您可以向数组映射添加嵌套数组_映射,并执行相同的操作。