Я пытаюсь создать что-то там, где он изменит весь текст на веб-странице и снова выведет его пользователю. Это будет изменение слов, предопределенных в базе данных.
Я использую http://simplehtmldom.sourceforge.net как мой парсер HTML. То, что я хочу todo, – это изменить только тег внутри тегов, но не теги. Я думал, что это сработает. Если я откликнусь на $e->plaintext
он будет работать, но тогда это не стиль.
<?php // example of how to modify HTML contents include('../simple_html_dom.php'); // get DOM from URL or file $html = file_get_html('http://example.com/'); $e = $html->find("html", 0); $text = $e->plaintext; $con = mysqli_connect("localhost","root","root","Words"); $result = mysqli_query($con,"SELECT * FROM Wordsweb"); //replace all words $English = array(); $Simple = array(); while ($row = mysqli_fetch_array($result)){ $English[] = $row['English']; $Simple[] = $row['Simple']; } $e->plaintext = str_replace($English, $Simple,$e->plaintext); echo $e; ?>
Заранее спасибо!
ps : ранее я использовал preg_replace_callback
но мне было рекомендовано это использовать.
Заменяйте содержимое каждого текстового узла отдельно, а не сразу меняйте текст всего файла:
<?php // load the HTML document $doc = new DOMDocument; @$doc->loadHTMLFile('https://en.wikipedia.org/wiki/Banana'); // select all the text nodes $xpath = new DOMXPath($doc); $nodes = $xpath->query('//text()'); // replace text in each text node $english = array('banana', 'bananas'); $simple = array('yello', 'yellos'); foreach ($nodes as $node) { $node->nodeValue = str_replace($english, $simple, $node->nodeValue); } print $doc->saveHTML();