1
我正在尝试计算由curl请求返回的HTML文档中字符串的出现次数。我通常会用substr_count
来做到这一点,但我希望只匹配用户可见的文本(在浏览器加载的页面中看到的文本),而不是来源中的所有匹配。作为一个例子,遇到以下段落:计算HTML文档中可见文本的出现次数
<p class="example">example</p>
搜索字符串“榜样”,我希望到这里算一次发生,因为类的名字应该从计数被省略。我目前使用DOMXpath来解析HTML文档的其他部分,所以我看着使用它用于此目的,以及使用:
$xpath->query("//text()[contains(., 'example')]");
,我发现其他人使用查找文档中的文本,但是这似乎也计数标签内的发现。有没有一种方法可以只依赖用户可见的文本?我想指出,用户可见仅仅意味着文本不是元数据,属性等的一部分。如果组件的样式不可见,但会产生可见的文本,则应对该文本进行计数。例如:
<p class="example" style="visibility:hidden">example</p>
仍然应该如前所述统计一次。
编辑
strip_tags
将处理我已经表明了实例。有没有办法处理在脚本等内找到的实例?以下不应归属于计数:
<script type="text/javascript">var example = 1 ....other stuff....</script>
这会照顾直列出现的,有没有什么办法来处理脚本中出现?我将编辑该问题以更好地显示 – yanman1234
@ yanman1234指出的点...尝试上面的代码。它可能不完美,但它是一个概念的证明。在新行上拆分html,并查看每行隐藏或脚本,如果找到,则删除该行。然后,所有剩下的都应该是标签和可见文本,因此带状标签应该给出正确的结果。 – Andreas
虽然这有其缺陷,但我认为你是对的,我需要在搜索之前手动清理文档。谢谢! – yanman1234