PHP-从HTML中提取文本,翻译并放回原处

PHP-从HTML中提取文本,翻译并放回原处,php,html-parsing,text-parsing,Php,Html Parsing,Text Parsing,我正在使用一个API来翻译我的博客,但它有时会弄乱我的html,这给了我更多的工作来修复一切 我现在要做的是从html中提取内容,翻译并放回原处 我首先尝试用preg#u replace来做这件事,在这里我会用像###a#####这样的东西来替换每个标记,然后在翻译文本后返回到原始标记。不幸的是,这很难管理,因为我需要用唯一的值替换每个标记 然后,我尝试了“简单html dom”,可以在这里找到: 通过这种方式,我获得了所有文本,但值(div中的div)中仍然有一些html,我不知道如何将翻译

我正在使用一个API来翻译我的博客,但它有时会弄乱我的html,这给了我更多的工作来修复一切

我现在要做的是从html中提取内容,翻译并放回原处

我首先尝试用preg#u replace来做这件事,在这里我会用像###a#####这样的东西来替换每个标记,然后在翻译文本后返回到原始标记。不幸的是,这很难管理,因为我需要用唯一的值替换每个标记

然后,我尝试了“简单html dom”,可以在这里找到:

通过这种方式,我获得了所有文本,但值(div中的div)中仍然有一些html,我不知道如何将翻译后的文本放回原始对象。此对象的结构非常复杂,显示它时会使我的浏览器崩溃

我已经没有选择了,可能有更直接的方法。我想找到一种方法来获取一个对象或数组,其中一边包含所有html,另一边包含所有文本。我会在文本中循环以使其翻译,并将所有内容合并回去,以避免破坏html

你认为实现这一目标有更好的选择吗

谢谢 洛朗

然后拆分“>”上的每个数组项。此数组中的第一项是标记。其他每一项(如果有)都将是翻译的内容


转换完成后,您可以通过再次将数组项粘回来反转它。

例如,我有以下HTML,其中所有单词都是小写的:

<div>
    <h2>page not found!</h2>
    <p>go to <a href="/">home page</a> or use the <a href="/search">search</a>.</p>
</div>
上述结果如下:

<div>
    <h2>Page Not Found!</h2>
    <p>Go To <a href="/">Home Page</a> Or Use The <a href="/search">Search</a>.</p>
</div>

找不到页面!
转到或使用


谢谢,这是一个好主意,但有时标签在翻译过程中会被翻译,然后用胶水粘回去会破坏最初的代码。如果在未编码的文本部分使用,则标签最终会出现在te文本中。有一些选择。首先是在html页面中预先将所有文本编码为htmlentities。第二个(如果第一个选项不在选项中)查看标记部分的长度,如果它比通常的标记长度长,则它是带有<或>的文本。
Array
(
[0] => 

[1] => div>

[2] => p>
        This text is for translating
[3] => br>
        Next line of text

[4] => /p>

[5] => /div>

)
<div>
    <h2>page not found!</h2>
    <p>go to <a href="/">home page</a> or use the <a href="/search">search</a>.</p>
</div>
libxml_use_internal_errors(true);
$dom = new DomDocument();
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);

foreach ($xpath->query('//text()') as $text) {
    if (trim($text->nodeValue)) {
        $text->nodeValue = ucwords($text->nodeValue);
    }
}

echo $dom->saveHTML();
<div>
    <h2>Page Not Found!</h2>
    <p>Go To <a href="/">Home Page</a> Or Use The <a href="/search">Search</a>.</p>
</div>