🧰 UtlKit

HTML 转纯文本怎么用: 注释和脚本消失, 表格压成空格分隔的行, 图片连同 alt 一起不见, pre 块保留原始空白, 段落与单行两种模式一次讲清

逐步走通 HTML 转纯文本转换器的确切行为: 脚本, 样式, 注释被移除, 实体被解码, 表格变成空格分隔的行, 图片被丢弃且 alt 从不读取, pre 块逐字保留, 以及段落与单行两种输出.

HTML 转纯文本转换器只做一件事, 而且全部在浏览器里完成: 粘贴一份 HTML 文档, 按下 转换为文本, 得到剥离标记后人们能读到的纯文本. 不存储, 不上传; 解析器是浏览器自带的 DOMParser, 运行在本机.

粘贴 HTML 并点击转换

这里没有实时转换: 输入保持原样, 直到按下 转换为文本 按钮, 输出面板才填充内容. 一个 保留段落结构 复选框控制输出布局, 默认开启. 开着时文本保留块级换行; 关掉时所有内容连成一行连续的词. 如果输入为空或只有空格, 按钮什么都不做, 也不出现错误信息, 所以误粘贴空白并不是失败状态.

两种输出形态: 段落或单行

复选框开启时, 转换器按块遍历文档. 每个浏览器会渲染成独立行的元素, 比如段落, 标题, 列表项, 表格行, 都会另起一行, 并且与前面的内容之间隔一个空行. 复选框关闭时, 这些换行全部变成单个空格: 同一份文档以一个扁平的词串返回, 词序不变, 没有任何换行. 文本内的空白两种方式下都会被归一, 连续空格或杂散的制表符都压成一个空格.

什么会消失: 脚本, 样式和注释

三类内容永远到不了输出. 转换器在读任何东西之前移除所有 script, style 和 noscript 元素, 所以内联 JavaScript, CSS 规则和后备块全部消失. HTML 注释以同样的方式被跳过: 两个段落之间的注释不留痕迹, 连空行都没有. 存活下来的是可见文本和其中的实体, 因为解析器在读取时解码它们: & 变回裸的 & 符号, <tag> 变成尖括号里的字面单词.

表格, 列表和图片

表格以纯文本行返回: 每一行成为自己的一行, 每个单元格与下一个之间只有一个空格, 输出里没有任何制表符或竖线字符. 列表表现像一组块, 所以每个列表项落在自己的一行, 项与项之间隔一个空行. 图片是输出可能让人意外的地方: img 标签完全不贡献任何内容, 它的 alt 属性也从不被读取, 所以包裹着图片的段落会把图片前后的文本直接连在一起, 嵌在单词中间的 img 可能让两段文字粘成一片.

br 和 hr: 是换行, 不是空行

不是所有换行都是块级换行. 段落里的 br 或 hr 插入一个单换行: 下一个词从下一行开始, 但两者之间没有空行, 这让诗或地址保持为同一个视觉块. 这与段落标签关闭时不同, 后者添加完整的空行分隔. 在单行模式下, 两种换行最终都变成同一个空格, 所以这个区别只在保留段落结构时才有意义.

唯一的例外: pre 块保留空白

转换器里的一切都走同一条空白规则, 只有一个标签例外. pre 块被逐字复制: 它的文本内容按原样取出, 缩进, 空行都在, 后面跟着与其他块一样的空行. 把代码示例放进 pre 标签, 它会以你输入的样子原样返回, 这正是 pre 成为保留代码和列对齐文本的标准位置的原因, 当文档其余部分被压平的时候.

复制, 清除, 以及下一步

流程刻意做得很小. 只有当有内容可复制时, 输出上才出现 复制 按钮; 清除 一次按键同时清空输入和输出. 没有交换控件, 因为输出是没有结构的纯文本, 没有可回喂的内容, 页面上也不在任何访问之间保留任何东西. 如果标记在转换前就很乱, 先用 HTML 格式化 规范缩进. 如果你需要这些特殊字符的反方向, HTML 实体编解码器 能为你编码和解码它们, 如果内容以 Markdown 开始, Markdown 预览 会在你导出之前展示渲染结果, 而 HTML 格式化教程 深入讲格式化那一边.

相关工具

常见问题

转换器会把表格保留成制表符或竖线这样的结构吗?

不会. 每个表格行成为自己的一行, 单元格之间只有一个空格, 所以表格读起来是空格分隔的值, 输出里没有任何制表符或竖线字符. 嵌套表格会被压平成同样的按行布局.

图片的 alt 文本会出现在输出里吗?

不会. 图片被整体丢弃: 转换器只读取文本内容, 所以 img 标签不贡献任何内容, 它的 alt 属性也从不被提取. 图片前后的文本直接相连, 如果图片嵌在单词中间, 可能让两段文字粘在一起.

页面会在输入时实时转换 HTML 吗?

不会. 只有按下 转换为文本 按钮时才会处理输入, 输出在那一刻填充. 如果输入为空或只有空格, 按钮什么都不做, 也不显示错误信息.

代码块里的空白会被保留吗?

只有 pre 块会. pre 块的文本被逐字复制, 缩进和空行都在, 而其他地方连续的空白和制表符都压成一个空格. 这就是为什么代码示例只有放在 pre 标签里才能存活转换.

HTML 实体会在输出里被解码吗?

会. 解析器在读取时解码实体, 所以 & 变回 &, < 和 > 变成字面的尖括号. 输出的是浏览器会渲染的可见文本, 不含标记.

相关文章