python -c "from bs4 import BeautifulSoup; print(BeautifulSoup('<p>正文<img src=x>', 'html.parser').get_text()[:20])"
npx html-truncate -i input.html -l 120

列表页摘要取正文前 120 个字符,结果输出成 <p>正文<img src="https://...,整页后面的 DOM 都被吞进属性里,样式全崩。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:按字符截断只保证长度,不保证 HTML 结构完整,标签开在边界上就留下半个。浏览器解析到未闭合的属性会一直吞后续内容。

「HTML 截断标签」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。同一份配置存在多处的,先确认改的是被加载的那一份。

新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

处理上按这个顺序:截断前先剥掉标签只留纯文本;需要保留格式就解析成 DOM 再按节点截取;截完补齐未闭合的标签;输出前做一次转义 防止半截标签被当结构解析。

确认没问题再收工,摘要里没有未闭合标签 列表页 DOM 结构完整样式正常。

作者 9823189