- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 API 来翻译我的博客,但它有时会弄乱我的 html,这让我需要更多的工作来修复所有问题。
我现在想做的是从 html 中提取内容,翻译它并将其放回原来的位置。
我首先尝试使用 preg_replace 来执行此操作,其中我将用 ##a_number## 之类的内容替换每个标签,然后在文本翻译后恢复到原始标签。不幸的是,它很难管理,因为我需要用唯一的值替换每个标签。
然后我用“simple html dom”尝试了它,可以在这里找到: http://simplehtmldom.sourceforge.net/manual.htm
$html = str_get_html($content);
$str = $html;
$ret = $html->find('div');
foreach ($ret as $key=>$value)
{
echo $value;
}
这样我得到了所有文本,但值中仍然有一些 html(div 内的 div),我不知道如何将翻译后的文本放回原始对象中。这个对象的结构非常复杂,以至于当显示它时,它会导致我的浏览器崩溃。
我已经没有什么选择了,可能有更简单的方法可以做到这一点。我想找到一种方法来获取一个对象或数组,其中一侧包含所有 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>
我的任务是将文本转换为大写单词。为了解决这个问题,我获取所有文本节点并使用 ucwords 函数转换它们(当然,您应该使用翻译函数而不是它)。
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>
关于PHP - 从 HTML 中提取文本、翻译并放回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53805517/
我有一个问题,我在我的 C++ 程序中错误的时间得到一个 int 作为输入,所以我需要稍后在 cin 上“放回”。然而,我能找到的最接近于执行此操作的是 istream 的推回功能。遗憾的是,这仅适用
当工具栏被拖离 GUI 然后关闭(将其返回到 GUI)时,为什么这段代码会抛出 IllegalArgumentException? 我能理解为什么在没有约束的情况下添加组件可能是不合适的,但在这种情况
我是一名优秀的程序员,十分优秀!