You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP提取HTML内容翻译后格式丢失及编码异常问题求助

解决HTML翻译格式丢失与编码异常问题

一、修复HTML格式丢失

直接拆分HTML字符串翻译会导致API破坏标签结构,正确做法是用DOM操作只翻译文本节点,完整保留原HTML标签:

  1. 使用DOMDocument和DOMXPath解析HTML,定位目标容器下的所有非空文本节点
  2. 仅翻译纯文本内容,再将翻译结果放回原节点,完全保留原有HTML结构

示例代码片段:

$htmlContent = file_get_contents('fss4.html');
$dom = new DOMDocument();
// 避免解析时的编码问题和自动添加的html/body标签
$dom->loadHTML('<?xml encoding="UTF-8">' . $htmlContent, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);

// 提取page-container下的有效文本节点(排除空内容)
$textNodes = $xpath->query('//div[@id="page-container"]//text()[normalize-space(.) != ""]');

foreach ($textNodes as $node) {
    $originalText = trim($node->nodeValue);
    if (!empty($originalText)) {
        // 仅翻译文本内容,不触碰标签
        $translatedText = $tr->translate($originalText);
        $node->nodeValue = $translatedText;
    }
}

$new_html = $dom->saveHTML();

二、修复法语重音字符编码异常(Ãé显示问题)

这是UTF-8编码处理不严谨导致的乱码,需从文件读写、API返回两个环节优化:

  • 读取文件时强制转为UTF-8:

    $htmlContent = file_get_contents('fss4.html');
    // 自动检测原文件编码并转成UTF-8
    $htmlContent = mb_convert_encoding($htmlContent, 'UTF-8', mb_detect_encoding($htmlContent));
    
  • 写入文件时确保UTF-8编码:

    // 直接写入即可,若编辑器识别有问题可添加UTF-8 BOM
    file_put_contents('fss4_translated.html', $new_html);
    // 可选:添加BOM兼容部分旧编辑器
    // file_put_contents('fss4_translated.html', "\xEF\xBB\xBF" . $new_html);
    
  • 强制翻译API返回UTF-8:
    初始化翻译客户端时显式指定编码:

    $tr = new \Stichoza\GoogleTranslate\GoogleTranslate('en', 'fr'); // 根据需求调整源/目标语言
    $tr->setOptions(['encoding' => 'UTF-8']);
    

完整优化代码

require 'vendor/autoload.php';

use Stichoza\GoogleTranslate\GoogleTranslate;

// 初始化翻译客户端
$tr = new GoogleTranslate('en', 'fr');
$tr->setOptions(['encoding' => 'UTF-8']);

// 读取并转码HTML文件
$htmlContent = file_get_contents('fss4.html');
$htmlContent = mb_convert_encoding($htmlContent, 'UTF-8', mb_detect_encoding($htmlContent));

// DOM解析与文本翻译
$dom = new DOMDocument();
libxml_use_internal_errors(true); // 忽略HTML解析警告
$dom->loadHTML('<?xml encoding="UTF-8">' . $htmlContent, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();

$xpath = new DOMXPath($dom);
$textNodes = $xpath->query('//div[@id="page-container"]//text()[normalize-space(.) != ""]');

foreach ($textNodes as $node) {
    $originalText = trim($node->nodeValue);
    if (!empty($originalText)) {
        $node->nodeValue = $tr->translate($originalText);
    }
}

// 生成并保存最终HTML
$new_html = $dom->saveHTML();
file_put_contents('fss4_translated.html', $new_html);

内容的提问来源于stack exchange,提问作者Richardson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:27:08