【问题标题】:Simple HTML DOM str_replace on plain text纯文本上的简单 HTML DOM str_replace
【发布时间】:2013-11-24 20:26:50
【问题描述】:

我正在尝试创建一些内容,它将更改网页上的所有文本并将其重新输出给用户。它将更改数据库中预定义的单词。

我使用http://simplehtmldom.sourceforge.net 作为我的 HTML 解析器。我想做的是只更改标签内部的测试,而不是标签。我认为这会起作用,如果我回显$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;
?>

提前致谢!

p.s.:以前我使用的是preg_replace_callback,但有人建议我使用它。

【问题讨论】:

  • 如果不检查您要替换的实际代码,将很难找到问题所在...首先,请尝试$e-&gt;innertext...如果仍然无法正常工作,请至少发布部分您正在处理的 html 代码...
  • @Enissay 我已经尝试过 $e->innertext 但仍然没有希望。如果我回显 $e->plaintext 它会显示我的更新,但如果我想用标签显示它们以设置样式,则不会!
  • 你试过$e-&gt;outertext...它显示节点内容,包括周围的标签
  • @Enissay 它与页面相呼应,但与更改无关。

标签: php mysql dom str-replace simple-html-dom


【解决方案1】:

单独替换每个文本节点的内容,而不是一次更改整个文件的文本:

<?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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2020-03-02
    • 2023-03-04
    • 2013-04-28
    • 2016-07-30
    相关资源
    最近更新 更多