如何在 Python 3.1 中取消转义字符串中的 HTML 实体?[重复]

2025-02-25 09:09:00
admin
原创
91
摘要:问题描述:我四处寻找,只找到了针对 Python 2.6 及更早版本的解决方案,没有找到有关如何在 Python 3.X 中执行此操作的任何信息。(我只能访问 Win7 框。)我必须能够在 3.1 中做到这一点,最好不使用外部库。目前,我已经安装了 httplib2 并可以访问命令提示符 curl(这就是我获...

问题描述:

我四处寻找,只找到了针对 Python 2.6 及更早版本的解决方案,没有找到有关如何在 Python 3.X 中执行此操作的任何信息。(我只能访问 Win7 框。)

我必须能够在 3.1 中做到这一点,最好不使用外部库。目前,我已经安装了 httplib2 并可以访问命令提示符 curl(这就是我获取页面源代码的方式)。不幸的是,curl 不会解码 html 实体,据我所知,我在文档中找不到解码它的命令。

是的,我尝试过让 Beautiful Soup 在 3.X 中运行很多次,但都没有成功。如果您能提供关于如何在 MS Windows 环境中使用 Python 3 运行它的明确说明,我将不胜感激。

因此,为了清楚起见,我需要将这样的字符串转换Suzy & John为这样的字符串:“Suzy & John”。


解决方案 1:

您可以使用函数html.unescape:

Python3.4+中(感谢 JF Sebastian 的更新):

import html
html.unescape('Suzy & John')
# 'Suzy & John'

html.unescape('"')
# '"'

Python3.3或更早版本中:

import html.parser    
html.parser.HTMLParser().unescape('Suzy & John')

在Python2中:

import HTMLParser
HTMLParser.HTMLParser().unescape('Suzy & John')

解决方案 2:

您可以将其用于xml.sax.saxutils.unescape此目的。此模块包含在 Python 标准库中,可在 Python 2.x 和 Python 3.x 之间移植。

>>> import xml.sax.saxutils as saxutils
>>> saxutils.unescape("Suzy & John")
'Suzy & John'

解决方案 3:

显然,我的声誉不够高,除了发布此帖外什么也做不了。unutbu 的答案没有取消转义引号。我发现唯一能做到这一点的是这个函数:

import re
from htmlentitydefs import name2codepoint as n2cp

def decodeHtmlentities(string):
    def substitute_entity(match):        
        ent = match.group(2)
        if match.group(1) == "#":
            return unichr(int(ent))
        else:
            cp = n2cp.get(ent)
            if cp:
                return unichr(cp)
            else:
                return match.group()
    entity_re = re.compile("&(#?)(d{1,5}|w{1,8});")
    return entity_re.subn(substitute_entity, string)[0]

这是我从这个页面得到的。

解决方案 4:

Python 3.x也有html.entities

解决方案 5:

在我的例子中,我有一个在 as3 转义函数中转义的 html 字符串。经过一个小时的谷歌搜索,没有找到任何有用的东西,所以我编写了这个递归函数来满足我的需求。它在这里,

def unescape(string):
    index = string.find("%")
    if index == -1:
        return string
    else:
        #if it is escaped unicode character do different decoding
        if string[index+1:index+2] == 'u':
            replace_with = ("\\\"+string[index+1:index+6]).decode('unicode_escape')
            string = string.replace(string[index:index+6],replace_with)
        else:
            replace_with = string[index+1:index+3].decode('hex')
            string = string.replace(string[index:index+3],replace_with)
        return unescape(string)

编辑-1添加了处理unicode字符的功能。

解决方案 6:

我不确定这是否是一个内置库,但它看起来像你需要的并且支持 3.1。

来自:http://docs.python.org/3.1/library/xml.sax.utils.html ?highlight=html%20unescape

xml.sax.saxutils.unescape(data, entities={}) 对数据字符串中的 '&'、'<' 和 '>' 进行取消转义。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2098  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1460  
  建筑行业正处于数字化转型的关键时期,建筑产品生命周期管理(PLM)系统的实施对于提升项目效率、质量和协同性至关重要。特别是在 2025 年,基于建筑信息模型(BIM)的项目进度优化工具成为众多建筑企业关注的焦点。这些工具不仅能够整合项目全生命周期的数据,还能通过精准的分析和模拟,为项目进度管理提供强大支持。BIM 与建...
plm是什么软件   13  
  PLM系统开发的重要性与现状PLM(产品生命周期管理)系统在现代企业的产品研发、生产与管理过程中扮演着至关重要的角色。它贯穿产品从概念设计到退役的整个生命周期,整合了产品数据、流程以及人员等多方面的资源,极大地提高了企业的协同效率和创新能力。通过PLM系统,企业能够实现产品信息的集中管理与共享,不同部门之间可以实时获取...
国产plm软件   15  
  PLM(产品生命周期管理)系统在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和技术的飞速发展,企业对PLM系统的迭代周期优化需求日益迫切。2025年敏捷认证对项目管理提出了新的要求,其中燃尽图作为一种强大的可视化工具,在PLM系统迭代周期优化中有着广泛且重要的应用。深入探讨这些应用,对于提升企业的项...
plm系统主要干什么的   16  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用