2017-09-27 364 views
0

我使用PHP簡單的html dom解析器庫,我只想用[WORD FIND HERE]替換所有'manteau'單詞。這是我的代碼,下面的代碼不適用於不在標籤中的單詞。它只能在強標籤內使用「manteau」這個詞。如何解析所有節點文本?PHP簡單的html dom解析器 - 查找單詞

注意: str_replace不是解決方案。 DOM PARSER需要在這裏使用。我不想選擇錨點或圖片標籤中的單詞。

<?php 

    require_once '../simple_html_dom.php'; 
    $html = new simple_html_dom(); 
    $html = str_get_html('Un manteau permet de tenir chaud. Ce n\'est pas 
    un porte-manteau. Venez découvrir le <a href="pages/manteau">nouveau 
    manteau</a> du porte-manteau. 
    <h1>Tout savoir sur le Manteau</h1> 
    <p> 
     Le <strong>manteau</strong> est un élèment important à ne pas négliger. 
     Pas comme le porte-manteau. 
    </p> 
    <img src="path-to-images-manteau" title="Le manteau est beau">'); 


    $nodes = $html->find('*'); 

    foreach($nodes as $node) { 
     if(strpos($node->innertext, 'manteau') !== false) { 
      if($node->tag != 'a') 
       $node->innertext = '[WORD FIND HERE]'; 
      } 
     } 
    } 

    echo $html->outertext; 

?> 
+2

解析聽起來有點像這裏只是更換字矯枉過正。爲什麼不使用'str_replace' – lumio

+0

dom操作需要在這裏使用。我不想選擇錨定字或圖像標記 –

+0

我明白了。那麼使用解析是個好主意。我想你也可以使用正則表達式。 (* s/a矯枉過正/矯枉過正/) – lumio

回答

0

也許這是一個選項,可以排除您不想更改的標籤。

例如:

<?php 
require_once '../simple_html_dom.php'; 
$html = new simple_html_dom(); 
$html = str_get_html('Un manteau permet de tenir chaud. Ce n\'est pas 
un porte-manteau. Venez découvrir le <a href="pages/manteau">nouveau 
manteau</a> du porte-manteau. 
<h1>Tout savoir sur le Manteau</h1> 
<p> 
    Le <strong>manteau</strong> est un élèment important à ne pas négliger. 
    Pas comme le porte-manteau. 
</p> 
<img src="path-to-images-manteau" title="Le manteau est beau">'); 


$nodes = $html->find('*'); 

$tagsToExclude = [ 
    "a", 
    "img" 
]; 

foreach($nodes as $node) { 
    if (!in_array($node->tag, $tagsToExclude)) { 
     if(strpos($node->innertext, 'manteau') !== false) { 
      $node->innertext = str_replace("manteau", '[WORD FIND HERE]', $node->innertext); 
     } 
    } 
} 

echo $html->outertext; 
?> 
相關問題