占位文本生成器

按段落数和每段句数生成 Lorem ipsum 假文,句长按截断正态分布抽样,首段可带经典开头;随机种子固定后,同一组参数每次生成的结果完全一致,方便回归比对版式。

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Amet atque aliquip amet neque, enim est reprehenderit ut exercitation ipsum. Veniam ipsum elit. Culpa irure perspiciatis sunt, voluptate consectetur omnis et.

Exercitation ea ipsum deserunt exercitation, sit ex fugiat occaecat do. Accusantium voluptate et incididunt magna excepteur est. Anim exercitation id atque, officia natus natus velit sed. Unde ut ad natus laboris officia, elit esse exercitation consectetur dolor est doloremque.

Anim reprehenderit velit ex, exercitation non incididunt atque ut. Natus nostrud nulla cillum consectetur, occaecat nulla occaecat iste ipsum tempor. Anim dolor error ipsum, occaecat adipiscing lorem deserunt iste. Quis laborum veniam sint lorem, irure ex proident fugiat pariatur.

提示:在段落数、每段句数或种子输入框里按 Enter 可以直接生成;结果区是只读文本,可以整段选中复制。同一组参数与同一个种子,无论生成多少次结果都一样。

使用方法

  1. 在「段落数」填 3(默认值,允许 1~50)、「每段句数」填 4(默认值,允许 1~12)。
  2. 「随机种子」保持默认的 20261001。种子只是一个起点编号,同一个种子配同一组参数,生成的文本逐字相同,方便你前后对比两种版式的差别。
  3. 「首段用经典开头」默认勾选,第一段的第一个句子固定为 Lorem ipsum dolor sit amet, consectetur adipiscing elit.,让这段假文一眼能被认出是占位内容。
  4. 点「生成占位文本」,或在任意一个数字输入框里直接按 Enter。结果区出现的 3 段文字就是默认条件下的完整输出。
  5. 点「复制结果」整段带走,或点「下载 .txt」存成纯文本文件(UTF-8)。想换一批内容又不想改参数,点「换一个随机种子」即可。
  6. 点「恢复默认示例」把三个输入框和勾选框还原成上面这套默认值,并重新生成与页面初次打开时一模一样的那段文字。

这个占位文本生成器能解决什么问题

一是版式测试。设计稿落地之前,先用一段长度接近真实的文字把卡片、列表、正文区撑起来,看行高、折行位置、段落间距在长短词混排下会不会崩。占位文只关心「有多长、有多少段」。

二是前后端联调时先占坑。接口没通、数据库没数据时,先用假文把列表页和详情页填满,把真实布局提前跑通,免得接口通了才发现版式要重做。

三是做演示与原型。原型里如果全是「测试文本 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 段文字就是它的输出,八项指标实测如下:

108 个词共 778 个字符,平均每个词 5.76 个字母(词表里最短 2 个、最长 13 个),加上词间空格与句末标点正好凑出这个总长。一段「看起来差不多长」的假文,实际长度会随种子浮动,估容量时别只信一次结果。

档位与规模对照表

下表固定随机种子为 20261001 并勾选经典开头,逐档实测同一算法在同一序列上的输出规模。找目标字符数时按这张表选档位,比反复试要快:

段落数 × 每段句数句子数单词数字符数UTF-8 字节大致能填满
1 × 2219133133一个标题加摘要位
1 × 4430215215单张卡片
2 × 3647345345两栏并排
3 × 4(默认示例)12108778778一个常规正文区
3 × 82421415131513长文版式
5 × 42018813311331列表页多张卡片
5 × 84037426682668整页填满
10 × 44037426732673长文档
20 × 1224022361551215512压力测试与虚拟滚动

注意 5 × 8 与 10 × 4 都是 40 句:句子数相同,单词数也恰好一样(374),字符数却差了 5 个(2668 与 2673)。原因是分段数不同,段与段之间的空行换行符数量不一样——多出的每一段都会带来两个换行符。只比单词数不看分段,是估不准字符数的。

下面这张表列出全部 74 个词根及其长度,默认显示 12 行,点「加载更多行」继续展开。核对某段假文里的词是否都在词表内时,用这张表比对即可:

序号词根字符数含 -que 后缀
1lorem5—
2ipsum5—
3dolor5—
4sit3—
5amet4—
6consectetur11—
7adipiscing10—
8elit4—
9sed3—
10do2—
11eiusmod7—
12tempor6—
13incididunt10—
14ut2—
15labore6—
16et2—
17dolore6—
18magna5—
19aliqua6—
20enim4—
21ad2—
22minim5—
23veniam6—
24quis4—
25nostrud7—
26exercitation12—
27ullamco7—
28laboris7—
29nisi4—
30aliquip7—
31ex2—
32ea2—
33commodo7—
34consequat9—
35duis4—
36aute4—
37irure5—
38in2—
39reprehenderit13—
40voluptate9—
41velit5—
42esse4—
43cillum6—
44eu2—
45fugiat6—
46nulla5—
47pariatur8—
48excepteur9—
49sint4—
50occaecat8—
51cupidatat9—
52non3—
53proident8—
54sunt4—
55culpa5—
56qui3—
57officia7—
58deserunt8—
59mollit6—
60anim4—
61id2—
62est3—
63laborum7—
64perspiciatis12—
65unde4—
66omnis5—
67iste4—
68natus5—
69error5—
70voluptatem10—
71accusantium11—
72doloremque10是
73neque5是
74atque5是

输入范围、边界与精度说明

常见问题

为什么我两次生成的文字一模一样?

因为种子没变。本页用 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 面板,反复点「生成占位文本」观察有无请求发出即可。

相关工具