如何在 Python 中将*所有*字符转义为相应的 html 实体名称和数字?

2024-02-23

我想将字符串编码为其相应的 html 实体,但不幸的是我无法做到。正如我在问题标题中所说,我想要all字符串中的字符将被转换为相应的 html 实体(数字和名称)。所以根据文档 https://docs.python.org/3/library/html.html。我试过:

In [31]: import html

In [32]: s = '<img src=x onerror="javascript:alert("XSS")">'

In [33]: html.escape(s)
Out[33]: '&lt;img src=x onerror=&quot;javascript:alert(&quot;XSS&quot;)&quot;&gt;'

但我希望所有字符都被转换,而不仅仅是 ''、 '&' 等。 并且html.escape只给出html实体names不是数字,但我两者都想要。

但令人惊讶的是html.unescape https://docs.python.org/3/library/html.html#html.unescape将所有实体转义为其相应的字符。

In [34]: a = '<img src=x onerror="&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#000005
    ...: 8&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041">'

In [35]: html.unescape(a)
Out[35]: '<img src=x onerror="javascript:alert(\'XSS\')">' 

那么我可以做同样的事情吗html.escape https://docs.python.org/3/library/html.html#html.escape?

我真的很惊讶为什么all互联网上用于编码和解码 html 实体的资源并未对所有字符以及 php 进行编码htmlspecialchars()函数不这样做。我不想写出所有的 html 实体编号here https://www.freeformatter.com/html-entities.html逐个字符。


对于您正在做的事情,您实际上并不需要特殊的函数,因为您想要的数字只是相关字符的 Unicode 代码点。

ord https://docs.python.org/3/library/functions.html#ord几乎可以满足您的需求:

 def encode(s):
     return ''.join('&#{:07d};'.format(ord(c)) for c in s)

从美学上来说,我更喜欢十六进制编码:

 def encode(s):
     return ''.join('&#x{:06x};'.format(ord(c)) for c in s)

有什么特别之处html.escape https://docs.python.org/3/library/html.html#html.escape and html.unescape https://docs.python.org/3/library/html.html#html.unescape是它们除了数字实体之外还支持命名实体。转义的目标通常是将字符串转换为不包含 HTML 解析器特有字符的字符串,因此escape仅替换少数字符。除此之外,您所做的还确保字符串中的所有字符都是 ASCII。

如果您想尽可能强制使用命名实体,您可以检查html.entities.codepoint2name https://docs.python.org/3/library/html.entities.html#html.entities.codepoint2name应用后映射ord给角色:

def encode(s):
    return ''.join('&{};'.format(codepoint2name.get(i, '#{}'.format(i))) for i in map(ord, s))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Python 中将*所有*字符转义为相应的 html 实体名称和数字? 的相关文章

随机推荐

  • 组件输入更改父级中传递的值

    据我了解 Input组件中的字段应该是单向的 父级到子级 但是 我有一个值要传递给Input然后在组件中修改它 但我注意到它在父级中也发生了变化 这对我来说是有道理的 因为对象是通过引用传递的 但我猜这意味着 Angular 设置的整个 单
  • 针对 Java 5 和 Java 6 的即时、内存中 Java 代码编译

    如何从 Java 5 和 Java 6 中的任意字符串 在内存中 编译 Java 代码 加载它并在其上运行特定方法 预定义 在你对此进行讨论之前 我查看了现有的实现 大多数依赖于 Java 6 编译器 API 那些不这样做的人 只能依靠技巧
  • Heroku:帐户无权访问应用程序

    我试图git pull heroku master 但我得到了 Your account email protected cdn cgi l email protection does not have access to app name
  • tailwindcss:强制 tailwind 使用兼容的 RGB 语法?

    我正在使用 tailwindcss 移植一个应用程序以与 IE11 一起使用 不幸的是 tailwindcss 坚持使用现代技术生成颜色W3C CSS 颜色模块级别 4 rgb https drafts csswg org css colo
  • 加载新键盘时从数字键盘上删除“完成”按钮

    好吧 我会尽力解释这一点 我有一个 iPhone 应用程序 它有一个文本字段 用户只能输入数字 那里不是问题 但是 数字键盘上没有完成按钮 所以我无法让它消失 我可以制作一个按钮 用户按下该按钮即可关闭键盘 但我宁愿有一个完成按钮 因为屏幕
  • Eigen static libaligned_free“双重释放或损坏”

    这是一个延续较早的帖子 https stackoverflow com questions 70788173 eigen static lib memory align 但这一次希望有一个更好的例子 设置向量时 这个简单的测试会崩溃 我正在
  • 使用 DotNetZip 库解压包含非 ASCII 字符的文件

    我正在尝试使用 DotNetZip 库解压缩文件 该文件包含带有丹麦语字符 的文件夹和文件 TotalCommander 7Zip Windows 自己的 zip 都能正确提取文件 但 DotNetZip Library 会破坏丹麦语字符
  • MVC4 FoolProof 数据注释 - 如何检查该字段不等于零?

    我正在尝试使用 MVC Foolproof 库来验证我的模型并分别显示错误消息 但是 当我使用万无一失的验证时 单击提交按钮时 即使常规验证也不会显示 我的要求是我有一个数字文本框 它不应该为空或零 文本框值是根据从前面的下拉列表中选择的值
  • 如何将变量从控制器传递到视图 joomla mvc

    根据此示例 如何将变量从 joomla 子控制器传递到视图 class MYControllerControllerParser extends JController public function construct default a
  • 如何仅序列化.Net 中的某些属性?

    这是一个 Web 项目 所以我有几个继承自 Web UI 的类 我只想序列化非常特殊的属性 基本上 只有本地属性 我知道 XMLIgnore 属性可以放置在属性上以忽略项目 但这在我的上下文中不起作用 因为这需要修改一堆我真的不想修改的东西
  • 使用 Woocommerce 中的元查询从任何地方排除特定产品

    我想从我的商店页面以及我的主页中排除来自给定城市的产品 在主页中我显示来自 flatsome UX Builder 的 woocommerce 商店小部件 不确定它是一个小部件 的产品 给定城市的产品不会出现在我的商店页面中 但它们仍然出现
  • 如何在 Flutter 中将数据从子 Stateful widget 传递到 Parent Widget

    我的 flutter 应用程序中有一个有状态的小部件 DayPicker 相同的代码是 class DayPicker extends StatefulWidget override DayPickerState createState g
  • 分布式 ASP.Net 状态服务

    我想知道是否存在任何分布式 ASP Net State Service 替代方案 Session 可以存储在 InProc StateService 或 SQL 中 您还可以编写自定义存储提供程序 对于负载平衡 没有任何形式的粘性 IP 只
  • json 模式中的对象重用和组合

    我有一个 json blob 看起来像这样 ObjectA Object1 fields Object2 fields Object3 fields ObjectB Object1 fields Object2 fields Object3
  • srand (time (null)) 导致编译器警告:隐式转换丢失整数精度

    如果这个问题已经得到解答 我们深表歉意 include
  • ASP.net Bin目录-dll加载

    我需要在我的 asp net 应用程序中使用 dll 如何加载不是来自 bin 目录的 dll 也许我应该提到该应用程序是 asp 代码和 asp net 代码的混合体 所以 当我在我的机器上开发它时 我在 bin 目录中放置了一个 dll
  • 将 JSX 转换为 JSON 或 String,然后再转换回来

    我想将 React 组件的状态保存在数据库中 Json stringify myComponent 但是 当我尝试通过 JSON parse 再次使用该组件时 我得到了 Error Objects are not valid as a Re
  • 如何更改 Mac 上的 JAR 图标?

    我的 Mac 上有一个名为 Test jar 的 JAR 文件 当我单击它时 该文件运行得非常好 它所做的只是打开一个小窗口 并显示 Test 所以它是一个简单的应用程序 我是 Java 编程新手 我的问题是如何将 jar 文件的图标更改为
  • C# 二进制常量表示

    我真的被这个难住了 在C 中 有如下的十六进制常量表示格式 int a 0xAF2323F5 有二进制常量表示格式吗 不 C 中没有二进制文字 您当然可以使用 Convert ToInt32 解析二进制格式的字符串 但我认为这不是一个很好的
  • 如何在 Python 中将*所有*字符转义为相应的 html 实体名称和数字?

    我想将字符串编码为其相应的 html 实体 但不幸的是我无法做到 正如我在问题标题中所说 我想要all字符串中的字符将被转换为相应的 html 实体 数字和名称 所以根据文档 https docs python org 3 library