html.escape 可防止 xss:将纯文本(如 .txt)写入 html 前,必须用它转义特殊字符,否则 & 变成 & 等会引发解析错误或安全漏洞。

用 Python 的 html.escape 处理纯文本转 HTML 安全输出
直接把 .txt 内容塞进 .html 文件里,不转义就等于埋雷——& 变成 &、 变成 <code>,否则浏览器会误解析为标签。别手写正则替换,Python 标准库早有现成方案。
-
html.escape()是唯一推荐的起点,它只处理 5 个关键字符:、<code>>、&、"、' - 默认不转义单引号(
'),如需兼容旧浏览器或 XML 场景,加参数quote=False - 如果原始文本含 UTF-8 BOM 或换行符,先用
.strip()和.replace('\n', '<br>')控制段落,但注意:这属于语义渲染,不是转义本身
避免用 str.replace() 手动替换 HTML 特殊字符
有人写 text.replace('&', '&').replace(',看着短,实际会出错——比如 <code>& 被双重转义成 &,浏览器显示为 &。顺序、嵌套、重复替换全不可控。
- 手动替换无法识别已转义片段,容易污染已有 HTML 实体
- 遇到
©这类合法实体时,replace会把它切成©,彻底失效 - 性能上没优势,
html.escape是 C 实现,比 Python 循环快一个数量级
生成最小可用 HTML 文件:绕开模板引擎
不需要 Flask 或 Jinja2——只要把转义后的内容包进 就能当网页打开。重点是头部声明编码,否则中文变乱码。
- 文件开头必须写
<meta charset="UTF-8">,放在里,否则 Windows 记事本打开大概率是乱码 - 写入时用
open(..., encoding='utf-8'),跳过系统默认编码(比如 cp1252) - 示例结构:
<!DOCTYPE html> <html> <head><meta charset="UTF-8"></head> <body>{escaped_text}</body> </html>
Windows 下双击打开 .html 文件的路径陷阱
生成的 html_txt 文件名里带下划线没问题,但路径中含中文、空格、括号(如 C:\我的文档\test.txt)会导致双击后浏览器地址栏显示 file:///C:/.../test.txt 编码异常,文字乱码。
立即学习“前端免费学习笔记(深入)”;
- 最稳做法:把文件存到纯英文路径,比如
D:\txt2html\output.html - 如果必须用中文路径,用 Python 启动浏览器:
import webbrowser; webbrowser.open('file://' + os.path.abspath('output.html')) - 别依赖记事本“另存为 → UTF-8 + .html”,它常偷偷加 BOM,导致页面顶部多出空白行
html_txt 没问题,但真正影响结果的是三件事:是否用 html.escape 而非手写 replace、meta charset 是否显式声明、路径是否含特殊字符——其他都是表象。










