UBB 与 HTML 互转
文本所有处理都在浏览器本地完成,数据不上传服务器
把论坛代码(UBB,也就是 Discuz! 那一套 `[b]` `[url]` `[img]`)转成 HTML,或者反过来。嵌套是这里最要紧的一件事:`[b]粗[i]斜[/i]还是粗[/b]` 必须产出正确嵌套的标签,而用一连串「查找替换」实现的转换做不到 —— `[/i]` 该对应哪一个 `[i]` 只有栈知道,替换式实现会产出交叉嵌套的标签,浏览器只能猜,页面就乱了。另外:认不出的标签原样保留(`[hide]`、`[attach]` 是各论坛自己的扩展,丢掉等于悄悄删掉用户的排版),`javascript:` 这类链接不产出可点的 `<a>`(产物要粘进论坛,那是一个 XSS 入口),正文里的 `<` `&` 会被转义(否则「1 < 2」会变成一个畸形标签,把后面整段都解析歪)。
功能
- 行内标签:加粗、斜体、下划线、删除线、颜色、字号、字体、对齐
- 链接的两种写法([url]地址[/url] 与 [url=地址]文字[/url])、邮箱、图片
- 引用(含 [quote=某人] 的出处)、代码块、无序与有序列表
- 嵌套标签的闭合顺序正确 —— 这是查找替换式实现做不到的
- 没闭合的标签在末尾自动补上,多出来的结束标签当普通文本
- 标签名不分大小写,[B] 与 [b] 一样
- 字号按 Discuz 的 1–7 档位映射,不会变成 font-size: 7px
- [code] 块里的方括号不解析 —— 那是代码本身
- 认不出的标签原样保留,用户的排版不会消失
- javascript: 这类链接退化成纯文字,不产出可点的 <a>
- HTML → UBB 方向:段落、列表、引用、代码块、行内格式都覆盖
- 全部在浏览器本地完成,内容不外传
使用方法
- 把论坛代码或 HTML 粘进输入框
- 方向通常不用选 —— 以 < 开头会按 HTML 处理
- 需要时关掉「换行转成 br」
- 复制结果
常见问题
- 为什么嵌套标签要用栈来处理?
- 因为 `[/i]` 该对应哪一个 `[i]`,只有看到完整的标签序列才知道。用「查找替换」逐个换的实现,遇到 `[b]粗[i]斜[/i]还是粗[/b]` 会产出交叉嵌套的标签(`<strong>粗<em>斜</strong>还是粗</em>`),浏览器只能自己猜怎么补,页面就乱了。而这类错误不会报任何错,只是显示不对。所以这里是栈式的:扫一遍、入栈出栈、最后把没闭合的补上。
- 认不出的标签会怎样?
- 原样保留,不转也不删。`[hide]`(回复可见)、`[attach]`(附件)、`[media]`(视频)都是各论坛自己的扩展,Discuz 之外的站点没有对应物,工具无从知道该变成什么。留着的话用户一眼能看出「这里有个东西没转」,剪掉的话他拿到的是一段缺内容的帖子,而屏幕上完全看不出来。
- 为什么有些链接没有变成链接?
- 因为它们的协议是 `javascript:`、`data:` 这类。产物是要粘进论坛或博客的,一个可点的 `javascript:` 链接在那里就是一个 XSS 入口。工具只放行 http、https、ftp、mailto、tel 等正常协议,其余的只保留文字、不产出 `<a>`。
- 字号 [size=5] 是多少像素?
- Discuz 的字号是 1–7 的档位而不是像素值,直接当数字用会得到 `font-size: 7px` —— 一个连字都看不清的值。这里按 Discuz 模板里实际用的档位映射:1→12px、3→16px(默认)、5→24px、7→48px。认不出的档位退回 16px。
- 换行要不要转成 br?
- 论坛的约定是「换行就是换行」,所以默认转。但有些站点在渲染时本来就按 CSS 的 `white-space: pre-wrap` 处理,那种情况下再插 `<br>` 会让每个空行都变成两倍行距。如果你粘过去发现行距变大了,把这个选项关掉即可。
- 内容会被上传吗?
- 不会。转换全在浏览器内存里完成,页面不发送任何请求,断网也能用。
相关工具
HTML 实体编解码
编码把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。
HTML 格式化
格式化在线 HTML 格式化与压缩:按标签层级缩进,文本与行内标签保持同一行,script 与 pre 内容原样保留。代码不出浏览器,不上传服务器。
Markdown 预览
文本左栏写 Markdown、右栏实时渲染,标题自动带锚点与目录,代码块按语言着色并可一键复制;粘进来的 HTML 只当文本显示,内容不上传。
文本清洗
文本清洗从日志或表格里复制出来的一列内容:去重行、排序、去空行、去首尾空白、去行号、合并多空格,规则逐条开关。粘贴的内容只在本机处理。
文本对比
文本把两份文本逐行对比,高亮标出新增、删除与未改动的行,改动按最小差异对齐,而不是整段标成变了。全部在浏览器本地完成,内容不上传。
字数统计
文本中英混排的文本到底有多长?中文按字、英文按词分开统计,给出字符数、行数、字节数、阅读与朗读时长,以及会被切成几条短信。全部在本机完成。