PHP - 从 HTML 中提取文本、翻译并放回

2024-04-29

我正在使用 API 来翻译我的博客,但它有时会弄乱我的 html,这让我需要更多的工作来修复所有问题。

我现在想做的是从 html 中提取内容,翻译它并将其放回原来的位置。

我首先尝试使用 preg_replace 来执行此操作,其中我将用诸如 ##a_number## 之类的内容替换每个标签,然后在文本翻译后恢复到原始标签。不幸的是,它很难管理,因为我需要用唯一值替换每个标签。

然后我用“simple html dom”尝试了它,可以在这里找到:http://simplehtmldom.sourceforge.net/manual.htm 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP - 从 HTML 中提取文本、翻译并放回 的相关文章

随机推荐

  • iTunes connect - 在哪里可以查看 TestFlight 版本的崩溃报告?

    我有一个应用程序正在 iTunes 连接上通过 TestFlight 进行测试 其中一台测试设备不断崩溃 我很确定 itunes connect 上应该有崩溃日志 但我在 testflight 版本中找不到任何崩溃日志 有谁知道在哪里可以找
  • Lambda函数检查特定标签是否不存在-​​python

    我正在尝试以下内容 获取满足以下任一条件的所有 EC2 实例 被标记为标签所有者和值未知或未知 缺少标签所有者 我能够完成 1 但不知道如何实现 2 import boto3 import collections import dateti
  • 如何监听youtube iframe的音量变化?

    Here https stackoverflow com a 17087006 4992248我找到了一个如何收听 YouTube iframe 的 播放 暂停 按钮的示例 player addEventListener onStateCh
  • 一段时间后 NSTimer 停止在后台触发

    嘿 我正在开发一个应用程序 其中我必须每 30 秒调用一次 API 所以我为它创建了 NSTimer 但是当我的应用程序进入后台时 计时器会在 3 4 分钟后停止触发 所以它只能在后台运行 3 4 分钟 但之后就不再运行了 我如何修改我的代
  • FBSDK 共享对话框无法在 IOS 11 上运行

    我在用FBSDKShareDialog在 facebook 上分享图片 但在 IOS11 上不起作用 Facebook 共享对话框未打开 我怎样才能分享这篇文章并让它在 IOS11 和以前的版本上也能工作 我以前的工作代码 FBSDKSha
  • 为什么 Box2D 不应该使用像素作为单位?

    手册中说我应该使用小单位 0 1 10米 不鼓励使用像素作为测量单位 但是为什么 Box2D 比我使用小单位时工作得更好 并且具有更好的模拟效果呢 Box2D 是一个模拟框架 内部使用MKS 单位制 http en wikipedia or
  • 如何在刷新期间锁定哈希图?

    我有一个静电HashMap它在应用程序启动时填充 并每天刷新 如何确保刷新期间没有其他线程可以访问地图 ThreadSafe public class MyService private static final Map
  • 检测何时从控制台调用函数的最佳方法

    我想知道检测何时通过控制台直接调用方法或函数的最佳方法 据我目前了解 不可能在相同的函数调用上直接检测到它 但使用 call and apply 函数的方法我可以通过传递附加数据this object 给出以下代码结构 function v
  • 从 Slack 机器人访问 Slack 文件

    我需要一个能够接收和保存从 Slack 聊天室发送的文件的 Slack 机器人 问题是 slack 不发送文件内容 而是发送指向该文件的链接数组 其中大多数 包括下载链接 都是私有的 无法通过机器人访问 它确实发送了一个公共链接 但该链接指
  • 在后台线程加载广告 (adMob)

    我想在后台线程上加载我的添加 因为它使得SlidingMenu打开和关闭时滞后 我应该使用Thread Handler Or AsyncTask String MY AD UNIT ID AdView adView new AdView g
  • 如何取消等待中的任务?

    我正在处理这些 Windows 8 WinRT 任务 并且尝试使用下面的方法取消任务 并且它在某种程度上有效 CancelNotification 方法确实被调用 这使您认为任务已被取消 但在后台任务仍在运行 然后在完成后 任务的状态始终为
  • 列出 AppDomain 中存储的所有自定义数据

    为了存储发生错误时的进程状态 我想列出存储在 AppDomain 中的所有 自定义 数据 通过 SetData LocalStore 属性是私有的 AppDomain 类不可继承 有什么方法可以枚举这些数据吗 AppDomain domai
  • 为什么 Convert.ToDecimal(Double) 舍入为 15 位有效数字?

    我有一个double小数点后17位 即 double myDouble 0 12345678901234567 如果我将其转换为decimal像这样 decimal myDecimal Convert ToDecimal myDouble
  • 如何在codeigniter中从数据库返回最后一条记录?

    我正在尝试获取我拥有数据的最后日期 所以我想打印 date data 列中的最后一个日期 在模型中 public function last record query this gt db gt select LAST date data
  • 无法让 log4net 与 .net windows 服务一起使用

    我有一个 Windows 服务app config and a log4net config app config
  • Qt3D 是 Qt5 的一部分吗?

    我在windows中安装了Qt5库 但Qt助手中没有关于Qt3D的文档 Qt3D 是 Qt5 的一部分还是已从发布版本 5 中删除 是的 Qt 3D 成为标准 Qt 库Qt 5 7 发布 http blog qt io blog 2016
  • 使用 git 客户端和 SVN 存储库的最佳工具/方法

    我已经使用 SVN 大约两年了 主要是通过 TortoiseSVN 和 IntelliJ 并尝试了 git 主要是通过 TortoiseGIT 在这里检测到模式 我们公司正在使用 SVN 作为存储库 他们不会考虑很快进行切换 在本地使用 g
  • 为什么我需要调用new? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中什么时候使用 new 什么时候不使用 https stackoverflow com questions 679571 when to use new and when not to in
  • 如何查找用户所属的所有组? (LDAP)

    我正在尝试获取某个用户所属的所有组 我有以下内容结构在LDAP中 o myOrganization ou unit1 cn admin cn guess and ou users cn ann cn bob cn carla myOrgan
  • PHP - 从 HTML 中提取文本、翻译并放回

    我正在使用 API 来翻译我的博客 但它有时会弄乱我的 html 这让我需要更多的工作来修复所有问题 我现在想做的是从 html 中提取内容 翻译它并将其放回原来的位置 我首先尝试使用 preg replace 来执行此操作 其中我将用诸如