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