假文產生器
要 250 個字就給剛好 250 個 —— 或者給你這一切的真出處,未打散的 Cicero 原文。
本機處理選好數量後按下按鈕
完全在你的瀏覽器裡執行 —— 打開開發者工具的 Network 分頁就能驗證
假文是一個早就被解決的問題,所以剩下能做好的只有別人跳過的細節。在這裡指定字數,拿到的就是那個字數,不是「湊完最後一句之後超過的那個數字」。想看出處,拿到的是 Cicero 的原文,而不是排版業從 1960 年代開始互相傳抄、早已走樣的那一版。所有東西都在這個分頁內就地拼好,因此不必等待,也不會有別人的伺服器替你設下的上限。
西元前 45 年的 Cicero,以及那個被切成兩半的字
這段假文有真正的出處,而且比印刷術還老。它出自 Cicero 在西元前 45 年寫的倫理學著作《De Finibus Bonorum et Malorum》(論善惡之極),確切位置是 1.10.32 與 1.10.33 兩節。那段文字在論證「沒有人會為了痛苦本身去追求痛苦」,而其中剛好有一句 dolorem ipsum quia dolor sit amet。慢慢唸一次,就會發現那個相似不是巧合。
大家最熟的那個開頭,原文裡其實根本不存在。lorem 不是拉丁文的字,從來都不是 —— 它是 dolorem 的後半截,被最早把這段文字拿去當排版樣本的人從字的中間切開。這一個細節就解釋了為什麼標準假文看起來「很像拉丁文但又不太對」:流通版本被重打、被縮寫、被記錯了太多次,才會混進 eiusmod、incididunt、ullamco 這些拉丁文裡不存在的字。
這條線索是 1980 年代由 Hampden-Sydney College 的拉丁文學者 Richard McClintock 追出來的。他注意到樣本裡最不像拉丁文的那個字 consectetur 罕見到可以直接拿去古典文獻裡搜,結果搜到了 Cicero。在那之前,這段文字普遍被當成純粹的亂碼。這一頁刻意同時提供兩個版本:「傳統填充文」給你客戶與同事預期會看到的那一版走樣字彙,「Cicero 原文」給你寫下來時的樣子。別人要的是熟悉的那一版,你卻塞給他正確的那一版,那也是一種答錯。
你要幾個字就是幾個字
多數假文產生器是一句一句地拼,只要超過你打的數字就停手。你要 250 個字會拿到 263 個,因為讓你越線的那一句總得寫完。當你只是要把版面填滿、沒有人在數的時候,這完全沒問題;但只要那個數字本身就是重點 —— meta description 的字數預算、一個絕對不能掉到第四行的卡片元件、有長度上限的資料庫欄位、按字計價的翻譯報價 —— 它就沒有用了。
這裡的最後一句會依剩下的量調整長度。剩 41 個字而原本要寫 18 個字的句子,就寫 18 個;剩 7 個字時就寫一個 7 個字的句子並且好好收尾,而不是把句子從中間截斷、留給你一段沒有句號的殘句。那一句讀起來會跟前面的句子有點不一樣,那是這個保證看得見的、誠實的副作用,不是缺陷。句與段也適用同一條規則:選好單位、說出數字、拿到那個數量。
輸出上方的計數,是從螢幕上那段文字本身反算出來的,而不是把你打進去的數字原樣回顯一次。這個分別比聽起來重要。一個只會回顯的產生器,就算哪一天它自己的切分邏輯壞了,畫面上照樣寫著 250,而你會相信它 —— 因為那個數字跟你要的一致。從輸出反算的話,顯示與文字才有機會互相矛盾;真的矛盾的那一天,你會立刻看見。
要貼哪一種格式,以及標記本身的代價
預設是純文字,因為那是最禁得起折騰的格式。它貼進設計軟體、試算表儲存格、程式編輯器和文書處理軟體都不會夾帶任何東西,而段落之間空一行,是全世界每一個編輯器都認得的分段方式。反正你等一下要自己重排,就拿這個。
HTML 那個選項只把每一段包進一個 p 元素,其餘什麼都不做:沒有 class、沒有外層 div、沒有行內樣式、沒有 data 屬性。這個克制是刻意的 —— 帶著自己一套 class 的假資料標記,往往活得比假文字本身還久,半年後就會有人對著一條樣式規則發呆,而那個 class 從頭到尾只服務過填充文案。如果你的框架需要別的標籤,把 p 換成 li 或 td 是一次全域取代;但要拆掉別人發明的一整窩 div 就不是了。
兩個選項都不會做的事是:加入不斷行空白、彎引號或軟連字號。這幾種字元在幾乎所有編輯器裡看起來跟一般版本一模一樣,行為在版面變窄時卻完全不同,而要在正式文案裡找出一個看不見的字元,是一個相當難受的下午。想測版面怎麼處理它們,就自己刻意放進去 —— 而不是在不被告知的情況下,從一個假文產生器繼承過來。
拉丁假文對中文排版沒有任何參考價值
拉丁假文是一把為拉丁字母校準過的尺,拿它去判斷一個之後要放中文、日文或韓文的版面,會得到又肯定又精確的錯誤答案。英文單字平均約五個字母,而且每一個空格都是一個可斷行點,所以拉丁文排出來的右緣是階梯狀、落差不小。中文沒有詞間空格、幾乎在任何一個字之後都能斷行,同一欄文字排出來的右緣幾乎是齊的。一個在拉丁假文下看起來平衡的版面,換成真正的中文之後可能又擠又灰,而假文階段完全不會警告你。
縱向的度量差得一樣遠。拉丁字母坐在基線上,有上伸部與下伸部,行高抓 1.5 左右就很舒服。中日韓文字填滿一個方形字身、沒有下伸部、單一字元的墨色覆蓋率高得多,同樣的 1.5 讀起來就是緊而密;中文內文通常要 1.7 到 1.9 之間。標點是第三個對不上的地方:全形標點佔滿一個字身寬,而哪些符號不能出現在行首行尾的規則也嚴格得多,所以兩種文字連斷行的位置都不一樣。
實務上的建議很短:用拉丁假文檢查結構 —— 網格、區塊之間的間距、標題跟它下面那段有沒有看起來像一組。不要用它決定字級、行高、欄寬,或估算「這裡放得下多少字」,因為真正的文案一進來,這四件事全部會變。需要中文形狀的假文,就用這一頁最後會放上去的那種文字;要量既有文案的長度,字元計數告訴你的東西是字數計數給不了的。
假文到底在解決什麼問題,什麼時候反而害了你
這個手法英文叫 greeking,而且遠早於網路:印刷業者用無意義的樣本文字排版,好讓客戶在看字體樣張時判斷的是字體,不是內容。這到現在仍然是它唯一站得住腳的理由。給利害關係人看一個裝著真句子的版面,會議就會變成在討論那些句子;給他們看一個裝著拉丁文的版面,他們才會終於去看你請他們看的那個東西。
它在三種情況下會失效,而且三種都很常見。內容大多是短字串的地方 —— 導覽列、按鈕、表格欄位標題、表單標籤 —— 用流動的段落去代表它是誤導的,因為那裡真正的難題是「最長的那一個標籤」,不是平均長度。任何有真實結構的東西,例如一個帶價格、庫存狀態和三個標章的商品頁,需要的是形狀相同的替身內容;在價格的位置擺一段拉丁文什麼都測不出來。而任何「文字本身就是意義」的介面 —— 錯誤狀態、空狀態、確認對話框 —— 一開始就必須用接近真實的措辭來設計,因為措辭就是設計。
還有一種失效完全不影響設計,但職業風險相當高:假文上線了。Lorem ipsum 出現過在印好的年報上、在戶外廣告看板上、在 App 商店的介紹裡,也出現在正在營運的電商網站頁尾,而且發現的人幾乎不會是出貨的那個團隊。它之所以活得下來,是因為它很安靜 —— 它看起來就是文字,所以不會觸發拼字檢查,也不會觸發「這個欄位是空的」警告,而審稿的人正如他們被訓練的那樣一眼掃過去。如果你有任何辦法在發布前把建置產物 grep 一次 lorem,就用它。
台灣的排版現場:正黑體、蘋方,以及那一行縮排
這一段是給在台灣做版面的人看的,英文版沒有 —— 因為上面那些「拉丁文與中文度量不同」的通則,落到台灣的實際工作環境裡還會再多幾層。第一層是字型:同一份 CSS,Windows 上多半落到微軟正黑體,macOS 與 iOS 上落到蘋方(PingFang TC),而這兩套字型的字面率不一樣。字面率是字身框裡實際有筆畫的比例,蘋方明顯偏大,所以同樣設 16px、同樣的行高,Mac 上看起來比 Windows 上飽滿一截。拉丁假文完全量不出這件事,因為它在兩台機器上落到的都是系統的拉丁字母字型,長得幾乎一樣。
第二層是繁體字本身。同一個字級下,繁體的平均筆畫數比簡體高,視覺重量也就更重;一份先用簡體樣稿排出來、覺得剛好的版面,換成繁體之後常常需要再放鬆行高與字距。標點的用法也不同:台灣的第一層引號是「」、第二層是『』,中國大陸慣用的是彎引號。這不只是風格問題 —— 全形的「」各佔一個字身寬,而彎引號在多數中文字型裡是半形寬,同一句話的長度會因此改變,行首行尾禁則要處理的對象也不一樣。
第三層是文件排版的慣例。台灣的提案書、公文與學位論文,內文段落多半首行縮排兩個字元,而那兩個字元是全形空格,不是兩個半形空白。拉丁假文縮排兩個空白看起來只是「有一點內縮」,中文縮排兩個全形空格是一個明確的視覺節點,段落的辨識度完全不同。再加上書籍與部分報紙仍在用的直排 —— 拉丁字母根本沒辦法直排 —— 結論就變得很清楚:拉丁假文在台灣的工作流程裡只適合用來確認結構,一旦要決定字級、行高、欄寬或縮排,就必須換成真正會上版的那種文字來看。
所有東西都在這個分頁裡產生
按下「產生假文」不會聯絡任何地方。那份字彙隨著你早就下載完的頁面一起過來,文字在本機拼好,跟點擊落在同一個影格裡。兩千個字花的時間跟二十個字一樣。這一頁設的上限是為了讓輸出還看得下去,不是為了配給什麼 —— 我們這邊沒有任何計量在跑,所以連按一百次跟按一次的代價完全相同。
與其相信我們,不如自己查一次;最快的路是檢視原始碼:那份字表就攤在頁面資源裡,而一個要去遠端拿文字的頁面拿不出這種東西。更有結論性的路是瀏覽器的網路面板 —— 把它篩到只剩 fetch 與 XHR,然後把按鈕按著不放,什麼都不會進來。本站每一個回應都帶著一份 Content-Security-Policy 標頭,把自己關在自己的來源裡,而真正把這條界線壓下去的是瀏覽器不是我們,所以連我們自己寫錯的時候它都還站得住。
離線可用是同一個設計的副產物。頁面第一次被造訪之後就被快取,而產生文字的每一步都不往外走,所以在飛機上、在隧道裡都照樣運作。抽字走的是瀏覽器密碼學亂數來源上的拒絕取樣,而不是對一個快速偽隨機產生器取模,因此字彙裡不會有哪一個條目被悄悄偏袒。對填充文案來說這個分別是學術性的,而我們寧可直說也不想把它包裝起來:這套程序本來就已經為本站的密碼產生器寫好了,刻意另外寫一套比較馬虎的反而更費工。
常見問題
Lorem Ipsum 是真的拉丁文嗎?
大家在用的那一版不是。它源自 Cicero 的一段真文字,但幾百年的重複轉抄混進了 eiusmod、incididunt、ullamco 這些拉丁文裡不存在的字,而且詞序早已組不成有意義的句子。把「文本」切到 Cicero 原文,拿到的就是真正的拉丁文,也真的有意思。
為什麼傳統假文是從一個字的中間開始的?
因為 lorem 是 dolorem 的後半截。最早把這段樣本從 Cicero 裡截出來的人,起點落在一個字的中間,而那個被切斷的形式就一路被抄到今天。這也是這段文字有真出處、而不是憑空捏造的亂碼,最直接的一項證據。
可以要剛好 500 個字,而不是大約 500 個嗎?
可以 —— 把計量單位選成「字(word)」,數量填 500。最後一句會依剩餘量調整長度,讓總數剛好落在你要的數字上,那也是它有時候比前面幾句短的原因。輸出上方那個字數是從產生的文字本身量出來的,所以你可以自己核對,不必相信我們。
為什麼 Cicero 原文那個選項每次都給我一樣的文字?
因為把它打散就違背了目的。那個選項的存在,是為了呈現 Cicero 寫下來時的樣子與順序;把字隨機重排只會產生第二個走樣版本,而那正是「傳統填充文」已經在做的事。想要每次不同,就切回傳統填充文。
中文版面可以用拉丁假文嗎?
只適合拿來確認結構。中文沒有詞間空格、幾乎任何一個字之後都能斷行、字身是方形的,而且通常需要比拉丁文更寬鬆的行高。字級、行高與欄寬這三件事,都必須拿真正會上版的那種文字來判斷。
把這些文字留在正式上線的頁面上安全嗎?
就「不會被追蹤、不涉及任何歸屬」而言是安全的,其餘每一個層面都很尷尬 —— 假文流到正式環境的頻率遠超過大家的想像,因為它夠像文字,足以騙過一次快速掃視。發布前把建置產物搜一次 lorem 不花任何成本,而且抓得到。
如果沒有伺服器,那些字是哪裡來的?
字彙跟著頁面一起送到你的裝置,接著瀏覽器就地把文字拼起來。這就是結果立刻出現的原因,也是按幾次按鈕都不受限制的原因,更是把網路整個關掉之後它照樣能用的原因。


