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

如何实现PHP字符串移除HTML标签后还原至原位置(适配DeepL翻译)

解决方案:移除HTML标签翻译后还原原位置

核心思路

先提取并记录HTML标签在原字符串中的位置与内容,移除标签后翻译纯文本,最后将标签精准插回对应位置。

具体实现步骤

  • 步骤1:提取标签与纯文本
    用正则或HTML解析工具捕获所有带属性的HTML标签,同时剥离标签得到纯文本。以Python为例,用re模块实现:

    import re
    
    original_str = "<div id='content'>Hi <i>there</i>, this is a <span class='highlight'>test</span>.</div>"
    tag_records = []
    # 匹配所有HTML标签并记录位置
    for match in re.finditer(r'<[^>]+>', original_str):
        tag_records.append({
            "content": match.group(),
            "start_pos": match.start(),
            "end_pos": match.end()
        })
    # 生成无标签的纯文本
    plain_text = re.sub(r'<[^>]+>', '', original_str)
    

    若处理复杂嵌套HTML,推荐用BeautifulSoup解析节点,避免正则的局限性。

  • 步骤2:调用DeepL翻译纯文本
    用DeepL API翻译剥离后的纯文本:

    import deepl
    
    translator = deepl.Translator("你的API密钥")
    translated_plain = translator.translate_text(plain_text, target_lang="ZH")
    
  • 步骤3:还原HTML标签
    按原标签的出现顺序,将标签插入翻译后的文本对应位置。需注意翻译后文本长度变化,通过原文本的文本片段与翻译后片段的对应关系来定位:

    # 拆分原文本为「文本片段+标签」的交替序列
    segments = []
    last_idx = 0
    for tag in tag_records:
        if last_idx < tag["start_pos"]:
            segments.append(("text", original_str[last_idx:tag["start_pos"]]))
        segments.append(("tag", tag["content"]))
        last_idx = tag["end_pos"]
    if last_idx < len(original_str):
        segments.append(("text", original_str[last_idx:]))
    
    # 提取原文本片段,拆分翻译后的文本为对应片段
    original_text_parts = [seg[1] for seg in segments if seg[0] == "text"]
    translated_parts = translated_plain.text.split()  # 可根据语义优化拆分逻辑
    
    # 拼接标签与翻译后的文本
    final_result = []
    text_part_idx = 0
    for seg in segments:
        if seg[0] == "tag":
            final_result.append(seg[1])
        else:
            final_result.append(translated_parts[text_part_idx])
            text_part_idx += 1
    final_str = " ".join(final_result)
    

关键注意事项

  • 处理嵌套标签时,用HTML解析库(如BeautifulSoup)遍历节点比正则更可靠,能避免标签匹配错误。
  • 翻译后文本的片段拆分需适配语言特性,比如中文无空格分隔,可通过原文本的标点、语义断点来对齐片段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:24:21