str_replace только в определенных тегах html

У меня есть html-страница, загружаемая в переменную PHP, и я использую str_replace для изменения определенных слов другими словами. Единственная проблема заключается в том, что если одно из этих слов появляется в важной части кода, то вся вещь падает до бит.

Есть ли способ применить функцию str_replace только к определенным тэгам html? В частности: p, h1, h2, h3, h4, h5

РЕДАКТИРОВАТЬ:

Бит кода, который имеет значение:

$yay = str_ireplace($find, $replace , $html); 

приветствия и благодарности за любые ответы.

РЕДАКТИРОВАТЬ – ДАЛЬНЕЙШАЯ РАЗРАБОТКА:

$ find и $ replace – массивы, содержащие слова, которые нужно найти и заменить (соответственно). $ html – это строка, содержащая весь код html.

хорошим примером его падения на бит было бы, если бы я должен был найти и заменить слово, которое произошло, например, в домене. Поэтому, если бы я хотел заменить слово «шляпа» на «сыр». Любое появление абсолютного пути, как

www.worldofhat.com/images/monkey.jpg будет заменено на: www.worldofcheese.com/images/monkey.jpg

Поэтому, если замены могут возникать только в определенных тегах, этого можно избежать.

Не обрабатывайте HTML-документ как простую строку. Как вы уже заметили, теги / элементы (и как они вложены) имеют смысл на HTML-странице и, следовательно, вы хотите использовать инструмент, который знает, что делать с HTML-документом. Тогда это будет DOM :

Вот пример. Сначала несколько HTML для работы с

 $html = <<< HTML <body> <h1>Germany reached the semi finals!!!</h1> <h2>Germany reached the semi finals!!!</h2> <h3>Germany reached the semi finals!!!</h3> <h4>Germany reached the semi finals!!!</h4> <h5>Germany reached the semi finals!!!</h5> <p>Fans in Germany are totally excited over their team's 4:0 win today</p> </body> HTML; 

И вот реальный код, который вам нужен, чтобы сделать Аргентину счастливой

 $dom = new DOMDocument; $dom->loadHTML($html); $xpath = new DOMXPath($dom); $nodes = $xpath->query('//*[self::h1 or self::h2 or self::p]'); foreach( $nodes as $node ) { $node->nodeValue = str_replace('Germany', 'Argentina', $node->nodeValue); } echo $dom->saveHTML(); 

Просто добавьте теги, которые вы хотите заменить, в вызове запроса XPath. Альтернативой использованию XPath было бы использование DOMDocument :: getElementsByTagName , которое вы, возможно, знаете из JavaScript:

  $nodes = $dom->getElementsByTagName('h1'); 

Фактически, если вы знаете это из JavaScript, вы можете узнать об этом намного больше, потому что DOM на самом деле является агностическим API-интерфейсом, определенным W3C и реализованным на многих языках. Преимущество XPath над getElementsByTagName заключается в том, что вы можете запросить несколько узлов за один раз. Недостатком является то, что вы должны знать XPath 🙂