PHP Dom Documents:获取文本内容忽略脚本标签和注释
我使用 dom doc 从数据库加载 html,如下所示:
$doc = new DOMDocument();
@$doc->loadHTML($data);
$doc->encoding = 'utf-8';
$doc->saveHTML();
然后我通过执行以下操作获取正文文本:
$bodyNodes = $doc->getElementsByTagName("body");
$words = htmlspecialchars($bodyNodes->item(0)->textContent);
我得到的单词包含 中的所有内容。还包括诸如
之类的内容。 我如何删除它们并只保留真实的文本内容?
i uses dom doc to load html from database like this:
$doc = new DOMDocument();
@$doc->loadHTML($data);
$doc->encoding = 'utf-8';
$doc->saveHTML();
Then i get the body text by doing these:
$bodyNodes = $doc->getElementsByTagName("body");
$words = htmlspecialchars($bodyNodes->item(0)->textContent);
The words i've gotten included everything in the <body>
. Things like <scripts>
were also included.
How do i removed them and keep only the real text content?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 XPath 来实现此目的。
借用 arnaud 在上面的示例中使用的 HTML:
您只需 查询 所有文本节点 不是 不是脚本标签的子标签 和 不计算为空字符串。您还要确保不 preserveWhiteSpace 因此不考虑用于格式化的空格。
将输出(演示)
You can use XPath for this.
Borrowing the HTML arnaud used for his example above:
You simply query all text nodes that not are not children of a script tag and do not evaluate to an empty string. You'll also make sure you dont preserveWhiteSpace so the whitespace used for formatting isnt considered.
will output (demo)
您必须访问所有节点并返回它们的文本。如果其中包含其他节点,也访问它们。
这可以通过以下基本递归算法来完成:
实现:
这将返回给定 $node 的 textContent,忽略脚本标签和注释。
在这里尝试一下:http://codepad.org/CS3nMp7U
You have to visit all nodes and return their text. If some contain other node, visit them too.
This can be done with this basic recursive algorithm:
Implementation:
This will return the textContent of the given $node, ignoring script tags and comments.
Try it here: http://codepad.org/CS3nMp7U