2017-06-02 73 views
-2

我想用HTML標籤之外的單詞替換單詞。只替換HTML標籤之外的單詞

所以,如果我有

<a href="test.html" title="Hello">Hello</a> 

,我想用「再見」我想獲得這樣的結果,以取代「你好」:

<a href="test.html" title="Hello">Bye</a>. 

嗯,我知道我必須使用DOM解析器來實現。

所以我用https://github.com/sunra/php-simple-html-dom-parser幷包括它。

現在我做

$test = $dom->find('text'); 

要獲得DOM的文本。

現在我可以遍歷結果:

foreach($test as $t) { 
    if (strpos($t->innertext,$word)!==false) { 
     $t->innertext = preg_replace(
       '/\b' . preg_quote($word, "/") . '\b/i', 
       "<a href='$url' target='$target' data-uk-tooltip title='$item->title'>\$0</a>", 
       $t->innertext,1 
      ); 
    } 
} 

但不幸的是,如果$item->title包含$字的HTML結構被砸壞。

+2

使用DOM文檔 – RomanPerekhrest

+0

你已經問過這個問題一次https://stackoverflow.com/questions/44324332/replace-only-rendered-text-in-html-source – RiggsFolly

+0

是的,那裏ppl告訴我使用DOM-lib。我做到了。但它不能解決我的問題。新案例;) – SPQRInc

回答

0

它看起來很混亂。根據the docs$dom->find($tag)返回所有標籤的數組,但您正在尋找一個名爲text的標籤?

也許你應該嘗試$test = $dom->find('a');而不是?

而且在你的代碼,目前尚不清楚其中的變量$url$target$item來自:

foreach($test as $t) { 
    if (strpos($t->innertext,$word)!==false) { 
     $t->innertext = preg_replace(
      '/\b' . preg_quote($word, "/") . '\b/i', 
      "<a href='$url' target='$target' data-uk-tooltip title='$item->title'>\$0</a>", 
      $t->innertext,1 
     ); 
    } 
} 

這應該更好的工作:

foreach($test as $t) { 
    if (strpos($t->innertext,$word)!==false) { 
     $t->innertext = preg_replace(
      '/\b' . preg_quote($word, "/") . '\b/i', 
      "Replacement", 
      $t->innertext,1 
     ); 
    } 
}