使用方法
- 在「段落数」填 3(默认值,允许 1~50)、「每段句数」填 4(默认值,允许 1~12)。
- 「随机种子」保持默认的 20261001。种子只是一个起点编号,同一个种子配同一组参数,生成的文本逐字相同,方便你前后对比两种版式的差别。
- 「首段用经典开头」默认勾选,第一段的第一个句子固定为
Lorem ipsum dolor sit amet, consectetur adipiscing elit.,让这段假文一眼能被认出是占位内容。 - 点「生成占位文本」,或在任意一个数字输入框里直接按 Enter。结果区出现的 3 段文字就是默认条件下的完整输出。
- 点「复制结果」整段带走,或点「下载 .txt」存成纯文本文件(UTF-8)。想换一批内容又不想改参数,点「换一个随机种子」即可。
- 点「恢复默认示例」把三个输入框和勾选框还原成上面这套默认值,并重新生成与页面初次打开时一模一样的那段文字。
这个占位文本生成器能解决什么问题
一是版式测试。设计稿落地之前,先用一段长度接近真实的文字把卡片、列表、正文区撑起来,看行高、折行位置、段落间距在长短词混排下会不会崩。占位文只关心「有多长、有多少段」。
二是前后端联调时先占坑。接口没通、数据库没数据时,先用假文把列表页和详情页填满,把真实布局提前跑通,免得接口通了才发现版式要重做。
三是做演示与原型。原型里如果全是「测试文本 1、测试文本 2」,注意力会被内容带走;换成看不出含义的拉丁文,评审时对方自然会聚焦在布局与交互上。
四是估版位容量。生成一段已知规模的假文塞进版位,就能量出它的实际容量。下面的档位对照表就是为这件事准备的。
本页的边界:这个占位文本生成器只输出拉丁文占位内容,不做中文假文,也不做真实文案生成——它本来就不承载语义。
生成原理:74 个词根、截断正态与 mulberry32
词表从哪来。Lorem ipsum 不是随机字母串,而是拉丁文被删改后的残片,出处是西塞罗《论至善与至恶》(De finibus bonorum et malorum)第一卷 1.32.21 前后的段落。流传最广的那版把词序打乱、掐头去尾,删掉有明显语义的连词与动词变形,留下 70 余个可任意拼接、又读不成完整句子的词根。本页固定为 74 个,其中 doloremque、neque、atque 保留了拉丁语连接后缀 -que(相当于英语的 and),原文献里本就连写,本页不拆分。
为什么是 74 个而不是 500 个。这是按「重复周期」与「能不能被一眼认出是假文」做的取舍。按生日问题算:一段约 9 个词时,74 个词根里出现重复词的概率是 39.7%;18 个词时升到 89.5%;36 个词时几乎必然重复(100.0%)。也就是说短段里偶尔重词是常态。反过来把词表扩到 500 个,36 个词的段落重复概率仍有 72.5%——扩表消除不了重复,只会让文本更像真实外语内容。占位文最怕的不是重复,而是被人误当正文发布。
句长为什么用截断正态而不是均匀分布。如果在 3~18 之间均匀取,3 个词的句子会和 9 个词的句子一样多,一段里频繁出现「只有三四个词的短句」与「挤满整行的长句」,方差大到失真——拿它去测版式,测到的是假文自己造出来的极端情况。本页改成 n = round(9 + 3 × z),其中 z 由 Box–Muller 变换从两个 [0,1) 均匀数生成,再把 n 截断到 [3, 18]。正态让 8~10 个词的中等句最常见,截断砍掉了 0 词句与超长句。20 万次抽样实测均值 9.027,最小 3、最大 18。
标点与大小写的固定规则。每句以句号收尾;词数达到 8 个及以上时,在第 floor(n/2) 个词后插一个逗号(9 个词的句子就在第 4 个词后),让长句有一点呼吸感;句首词第一个字母强制大写。除此之外不做任何变形,整段文本的形态因此可预期。
首段固定开头的原因。这句是整段残片里最完整、最容易被认出来的一句,业界文档、设计规范、组件库示例里到处都是它。放在第一段第一句,是为了让人扫一眼就知道「这是占位文本」,而不是没翻译完的外语。勾选框可关掉,关掉后第一句也参与随机抽取。
随机源与种子。本页不用 Math.random(),而是用 mulberry32——一个公开的 32 位伪随机数发生器:内部只有一个 32 位状态,每次与 0x6D2B79F5 累加,再做两轮异或与乘法混合,最后除以 232 得到 [0,1) 上的均匀数。它对占位文的质量绰绰有余,真正的好处是可复现:种子相同,序列相同,生成的文本逐字相同。所以页面打开时结果区那段文字,和你点「恢复默认示例」得到的完全一样。需要不可预测性时才用 crypto——「换一个随机种子」按钮用它挑新起点,之后仍按种子复现。
为什么不用分词。Intl.Segmenter 在这里派不上用场:占位文的词之间只有半角空格与句号,按空格切分就能得到全部词元,不需要语言相关的切词规则;而文本本来就是按词表拼装的,每一句几个词事先就知道。
完整示例(数值仅作演示)
示例条件与页面打开时的默认值完全一致:段落数 3、每段句数 4、随机种子 20261001、勾选经典开头。结果区那 3 段文字就是它的输出,八项指标实测如下:
- 段落数 3、句子数 12、最短句 3 词、最长句 13 词;
- 单词数 108,其中不重复的词 57 个——用的仍是那 74 个词根里的 57 个;
- 字符数 778、UTF-8 字节 778,两者相等,因为占位文全是 ASCII 字符,一个码点就是一个字节。
108 个词共 778 个字符,平均每个词 5.76 个字母(词表里最短 2 个、最长 13 个),加上词间空格与句末标点正好凑出这个总长。一段「看起来差不多长」的假文,实际长度会随种子浮动,估容量时别只信一次结果。
档位与规模对照表
下表固定随机种子为 20261001 并勾选经典开头,逐档实测同一算法在同一序列上的输出规模。找目标字符数时按这张表选档位,比反复试要快:
| 段落数 × 每段句数 | 句子数 | 单词数 | 字符数 | UTF-8 字节 | 大致能填满 |
|---|---|---|---|---|---|
| 1 × 2 | 2 | 19 | 133 | 133 | 一个标题加摘要位 |
| 1 × 4 | 4 | 30 | 215 | 215 | 单张卡片 |
| 2 × 3 | 6 | 47 | 345 | 345 | 两栏并排 |
| 3 × 4(默认示例) | 12 | 108 | 778 | 778 | 一个常规正文区 |
| 3 × 8 | 24 | 214 | 1513 | 1513 | 长文版式 |
| 5 × 4 | 20 | 188 | 1331 | 1331 | 列表页多张卡片 |
| 5 × 8 | 40 | 374 | 2668 | 2668 | 整页填满 |
| 10 × 4 | 40 | 374 | 2673 | 2673 | 长文档 |
| 20 × 12 | 240 | 2236 | 15512 | 15512 | 压力测试与虚拟滚动 |
注意 5 × 8 与 10 × 4 都是 40 句:句子数相同,单词数也恰好一样(374),字符数却差了 5 个(2668 与 2673)。原因是分段数不同,段与段之间的空行换行符数量不一样——多出的每一段都会带来两个换行符。只比单词数不看分段,是估不准字符数的。
下面这张表列出全部 74 个词根及其长度,默认显示 12 行,点「加载更多行」继续展开。核对某段假文里的词是否都在词表内时,用这张表比对即可:
| 序号 | 词根 | 字符数 | 含 -que 后缀 |
|---|---|---|---|
| 1 | lorem | 5 | — |
| 2 | ipsum | 5 | — |
| 3 | dolor | 5 | — |
| 4 | sit | 3 | — |
| 5 | amet | 4 | — |
| 6 | consectetur | 11 | — |
| 7 | adipiscing | 10 | — |
| 8 | elit | 4 | — |
| 9 | sed | 3 | — |
| 10 | do | 2 | — |
| 11 | eiusmod | 7 | — |
| 12 | tempor | 6 | — |
| 13 | incididunt | 10 | — |
| 14 | ut | 2 | — |
| 15 | labore | 6 | — |
| 16 | et | 2 | — |
| 17 | dolore | 6 | — |
| 18 | magna | 5 | — |
| 19 | aliqua | 6 | — |
| 20 | enim | 4 | — |
| 21 | ad | 2 | — |
| 22 | minim | 5 | — |
| 23 | veniam | 6 | — |
| 24 | quis | 4 | — |
| 25 | nostrud | 7 | — |
| 26 | exercitation | 12 | — |
| 27 | ullamco | 7 | — |
| 28 | laboris | 7 | — |
| 29 | nisi | 4 | — |
| 30 | aliquip | 7 | — |
| 31 | ex | 2 | — |
| 32 | ea | 2 | — |
| 33 | commodo | 7 | — |
| 34 | consequat | 9 | — |
| 35 | duis | 4 | — |
| 36 | aute | 4 | — |
| 37 | irure | 5 | — |
| 38 | in | 2 | — |
| 39 | reprehenderit | 13 | — |
| 40 | voluptate | 9 | — |
| 41 | velit | 5 | — |
| 42 | esse | 4 | — |
| 43 | cillum | 6 | — |
| 44 | eu | 2 | — |
| 45 | fugiat | 6 | — |
| 46 | nulla | 5 | — |
| 47 | pariatur | 8 | — |
| 48 | excepteur | 9 | — |
| 49 | sint | 4 | — |
| 50 | occaecat | 8 | — |
| 51 | cupidatat | 9 | — |
| 52 | non | 3 | — |
| 53 | proident | 8 | — |
| 54 | sunt | 4 | — |
| 55 | culpa | 5 | — |
| 56 | qui | 3 | — |
| 57 | officia | 7 | — |
| 58 | deserunt | 8 | — |
| 59 | mollit | 6 | — |
| 60 | anim | 4 | — |
| 61 | id | 2 | — |
| 62 | est | 3 | — |
| 63 | laborum | 7 | — |
| 64 | perspiciatis | 12 | — |
| 65 | unde | 4 | — |
| 66 | omnis | 5 | — |
| 67 | iste | 4 | — |
| 68 | natus | 5 | — |
| 69 | error | 5 | — |
| 70 | voluptatem | 10 | — |
| 71 | accusantium | 11 | — |
| 72 | doloremque | 10 | 是 |
| 73 | neque | 5 | 是 |
| 74 | atque | 5 | 是 |
输入范围、边界与精度说明
- 段落数 1~50,每段句数 1~12,两者都是整数。小数、负数、字母和空值都会被拒绝并给出具体提示。
- 单次总句数上限 300。20 × 12 得 240 句可以通过,50 × 7 得 350 句会被拦下,并告诉你当前的乘积。设这个上限是为了避免一次往页面里塞十几万字符拖慢渲染。
- 随机种子 0~4294967295(即 232−1)。种子相同、参数相同,输出逐字相同;只改种子不改参数,会得到一段规模相近但内容完全不同的文本。
- 句长恒在 3~18 词之间。这是截断正态的边界,也是「为什么不会出现只有一个词的句子」的答案;20 万次抽样里从未越界。
- 单词数不是句数的整数倍。句长是随机量,所以 12 句可能得到 108 个词,也可能得到 120 个词,两者都正常。
- 字符数与字节数在全 ASCII 时恒等。占位文里没有中文,所以两栏永远一样。一旦你把这段假文和中文文案混排,字节数就会明显大于字符数,那时要按字节估算存储。
- 输出是纯文本,段落之间用一个空行(两个
\n)分隔。本页不输出 HTML 标签——假文里只有字母、空格、逗号与句号,放进任何语境都不会破坏结构;你若要拼接自己的内容,转义仍要自己负责。 - 生成的文本不含语义。它看起来像拉丁文,实际是被打乱并删改过的残片,读不出连贯意思,因此不适合直接当作正式文案,也不要用它测试翻译或检索效果。
常见问题
为什么我两次生成的文字一模一样?
因为种子没变。本页用 mulberry32 伪随机发生器,种子决定整个序列,同一组参数与同一个种子必然产出逐字相同的文本——这正是「可复现」的意思,方便你把两次版式测试的结果直接对照。想要不同的内容,点「换一个随机种子」即可。
为什么生成的段落长度差这么多?
因为句长是按截断正态分布随机抽的,范围是 3~18 个词。一段里如果连续抽到几个短句,这一段的词数就会偏少;连续抽到长句则偏多。这是刻意保留的自然波动——真实文案的段落长度本来就不均匀,平均分布反而会让版式测试失真。
占位文里为什么会出现「doloremque」这种带 -que 的词?
因为 -que 是拉丁语的连接后缀,原文献里就写作连写形式,本页的词表保留了 doloremque、neque、atque 三个原样,没有拆成两个词。74 个词根里只有这 3 个带这个后缀,出现的频率并不高。
可以生成中文假文吗?
不能。这个占位文本生成器只输出拉丁文占位内容,词表是固定的 74 个拉丁词根。中文假文需要另一套词表与断句规则,本页不做,也不做「中文随机字」那种产物——那种文字看起来像乱码,反而干扰版式判断。
把假文粘进 HTML 需要转义吗?
不需要。生成的文本只包含 ASCII 字母、空格、逗号、句号和换行,没有 <、>、& 这些会破坏标记的字符。但如果你在它前面或后面加入了别的文案,那部分内容该转义还是要转义。
最多能生成多长的文本?
单次上限是 300 句。实测 20 × 12 即 240 句时,输出 2236 个词、15512 个字符,足够填满一屏以上的长文档;50 段 × 7 句会被拦下。要更长的内容,分批生成再拼接即可,同一批次的种子不变仍可复现。
「换一个随机种子」用的是真随机吗?
是的,这个按钮内部用 crypto.getRandomValues 取一个 32 位无符号整数作为新种子,来自操作系统熵源,不可预测。但它只负责挑一个新的起点编号,真正生成文本的仍是可复现的 mulberry32 序列,所以换种子之后依然可以复现。
生成的文本会上传到服务器吗?
不会。词表、随机数发生器和拼接逻辑全部写在当前页面里,没有任何网络请求,也不写入浏览器存储。想自己确认,打开开发者工具的 Network 面板,反复点「生成占位文本」观察有无请求发出即可。
相关工具
- PX转REM转换器:把设计稿像素值换成 rem,配合假文一起做响应式版式测试。
- REM转PX转换器:反向换算,核对某个 rem 值在当前根字号下到底是几像素。
- CSS单位速查表:px、em、rem、vw 的换算关系,量版式时随手查。
- HTML格式化:把粘进模板的假文连同标签一起整理缩进,便于检查结构。
- HTMLEntity速查表:需要把特殊字符写进标记时查实体名。
- Markdown转HTML转换器:把带假文的 Markdown 草稿转成 HTML 预览。
- 文本差异检测:两次生成的假文若参数不同,用它对比到底差在哪些词上。
- Meta标签生成器:用假文先把页面的标题与描述占位,联调时不必等真实文案。
- 开发者工具:查看全部开发者工具。