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

如何正确实现RSS源单/双重转义标题的反转义处理

RSS多重转义内容兼容反转义方案

问题场景

处理RSS feed内容时,除了常规的单次HTML实体转义内容,还会遇到异常多重转义的内容,典型异常标题样例:

<title>S&amp;amp;amp;P 500 : Wall Street amorce un rebond, Binance fait l&amp;amp;apos;objet d&amp;amp;apos;une enquête de la SEC</title>

浏览器对该内容的正确渲染结果为:

S&P 500 : Wall Street amorce un rebond, Binance fait l'objet d'une enquête de la SEC

常规单次反转义逻辑处理多重转义内容会残留转义字符,硬编码固定反转义次数(比如固定反转2次)又无法兼容单次转义、三重及以上转义的场景,容易出现转义不足或过转义问题。

实现方案

核心逻辑是循环执行标准HTML实体反转义,直到反转义结果不再发生变化为止,该方案天然兼容1次到N次的任意层数转义,不需要提前判断内容转义次数,也不会出现过转义问题。

实现注意事项

  • 不要硬编码固定反转义次数:固定次数无法覆盖所有转义场景,次数设少了会残留转义实体,次数设多了会把正文里本来需要保留的实体字符错误解析
  • 仅使用标准HTML实体反转义规则:只处理标准命名实体(&amp;/&apos;/&lt;/&gt;/&quot;等)和数字实体(&#39;/&#x27;等),不要自定义扩展解析规则,避免误解析正文内容
  • 终止条件判断:每次执行反转义后对比新旧字符串,二者完全一致时说明已经没有可解析的转义实体,直接终止流程返回结果即可
  • 前置处理优先使用标准XML解析器提取RSS节点文本,不要用正则表达式匹配截取标签内容,避免标签解析错误引入额外问题

代码示例(Python)

import html

def unescape_multi_escape(content: str) -> str:
    while True:
        current_result = html.unescape(content)
        # 无更多可反转义内容时终止
        if current_result == content:
            return current_result
        content = current_result

效果验证

  • 输入单次转义内容S&amp;P 500:第一次反转义得到S&P 500,第二次执行反转义结果无变化,返回正确结果
  • 输入前述三重转义的异常标题:经过3次循环反转义后得到和浏览器渲染完全一致的正确文本,第四次执行无变化后终止返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 00:03:48