
PrettyTable 默认会对 <caption> 中的 HTML 标签进行 HTML 实体转义,导致 <a> 等标签无法正常渲染;可通过 html.unescape() 对生成的 HTML 字符串进行反转义,从而恢复原始 HTML 结构。
prettytable 默认会对 `
PrettyTable 是一个轻量级 Python 库,常用于快速生成 ASCII 表格或导出为 HTML。但在使用 get_html_string(title=...) 时,其内部会自动对标题内容执行 HTML 转义(如 < →
解决方法非常简洁:先生成 HTML 字符串,再用标准库 html.unescape() 还原原始 HTML 标签。无需修改 PrettyTable 源码或引入第三方依赖。
以下是完整示例:
import html
from prettytable import PrettyTable
table = PrettyTable()
table.field_names = ["Name", "Email", "Phone"]
table.add_row([
"John Smith",
'<a class="__cf_email__" data-cfemail="1a70757274346977736e725a7f777b737634797577" href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9">[email​@example.com]</a>',
"XXX-XXX-XXXX"
])
# 使用含 HTML 的标题(会被自动转义)
html_output = table.get_html_string(title='<a href="https://www.example.com" target="_blank">? User Contact Table</a>')
# 关键步骤:还原 HTML 实体
safe_html = html.unescape(html_output)
print(safe_html)输出中 <caption> 将正确显示为:
立即学习“前端免费学习笔记(深入)”;
<caption><a href="https://www.example.com" target="_blank">? User Contact Table</a></caption>
✅ 注意事项:
- html.unescape() 仅解码标准 HTML 实体(如 仍需确保传入的 title 字符串本身是可信的(避免用户输入直传);
- 此方案适用于所有 HTML 标题场景:超链接、内联样式(<span style="color:red">)、Font Awesome 图标(<i class="fa fa-table">)等;
- 若需批量处理多个表格,可封装为辅助函数:
def get_html_with_raw_title(table: PrettyTable, title: str) -> str: return html.unescape(table.get_html_string(title=title))
⚠️ 注意:prettytable 当前(v3.10+)不支持禁用标题转义的内置参数,因此 html.unescape() 是最直接、兼容性最佳的解决方案。未来若升级至支持 escape_title=False 的版本,可改用原生配置,但现阶段该方法已被广泛验证稳定可靠。



















