chinese-typesetting:更好的中文文案排版

jxlwqq發表於2018-07-26

GitHub 地址:https://github.com/jxlwqq/chinese-typesett...

統一中文文案、排版的相關用法,降低團隊成員之間的溝通成本,增強網站氣質。

Web 排版強迫症患者的福音。

安裝

使用 Composer 安裝:

composer require "jxlwqq/chinese-typesetting"

使用

新增空格

use Jxlwqq\ChineseTypesetting\ChineseTypesetting;

$chineseTypesetting = new ChineseTypesetting();

$text = '今天,我在Apple Store上購買了一臺13英寸MacBook Pro膝上型電腦,花費了14188元。';
$chineseTypesetting->insertSpace($text);
// output: 今天,我在 Apple Store 上購買了一臺 13 英寸 MacBook Pro 膝上型電腦,花費了 14188 元。

$text = 'α碳原子為與有機物中與官能團相連的第一個碳原子,第二個為β碳原子,以此類推。';
$chineseTypesetting->insertSpace($text);
// output: α 碳原子為與有機物中與官能團相連的第一個碳原子,第二個為 β 碳原子,以此類推。

在中文與英文字母/用於數學、科學和工程的希臘字母/數字之間新增空格。

目前,比較主流的約定是在中文與英文之間新增空格。本包增加了對用於數學、科學和工程的希臘字母的支援。

清除空格

use Jxlwqq\ChineseTypesetting\ChineseTypesetting;

$chineseTypesetting = new ChineseTypesetting();

$text = '小林買了一部 iPhone X,他終於可以用上老婆的 iPhone 7 了 ,好開心!';
$chineseTypesetting->removeSpace($text);
// output: 小林買了一部 iPhone X,他終於可以用上老婆的 iPhone 7 了,好開心!

全形標點符號與其他字元之間無需新增空格。

全形轉半形

use Jxlwqq\ChineseTypesetting\ChineseTypesetting;

$chineseTypesetting = new ChineseTypesetting();

$text = '這個名為 ABC 的蛋糕只賣 1000 元。';
$chineseTypesetting->full2Half($text);
// output: 這個名為 ABC 的蛋糕只賣 1000 元。

有限度的全形轉半形(英文、數字、空格以及一些特殊字元等使用半形字元)。

修復錯誤的標點符號

use Jxlwqq\ChineseTypesetting\ChineseTypesetting;

$chineseTypesetting = new ChineseTypesetting();

// 修復省略號的錯誤用法
$text = '她輕輕地哼起了《搖籃曲》:“月兒明,風兒靜,樹葉兒遮窗櫺啊…”';
$chineseTypesetting->fixPunctuation($text);
// output: 她輕輕地哼起了《搖籃曲》:“月兒明,風兒靜,樹葉兒遮窗櫺啊……”

// 中文後面使用全形中文標點
$text = '你好,世界.';
$chineseTypesetting->fixPunctuation($text);
// output: 你好,世界。

// 不重複使用中文標點符號
$text = '你好激動啊!!!';
$chineseTypesetting->fixPunctuation($text);
// output: 你好激動啊!

專有名詞使用正確的大小寫

use Jxlwqq\ChineseTypesetting\ChineseTypesetting;

$chineseTypesetting = new ChineseTypesetting();

$text = '今天午休的時候,我突然回想起了電影《泰坦尼克號》中 rose 裸身讓 jack 作畫的情節。'
$chineseTypesetting->properNoun($text);
// output:今天午休的時候,我突然回想起了電影《泰坦尼克號》中 Rose 裸身讓 Jack 作畫的情節。

// 擴充套件詞彙
$text = '今天中午,我在 kfc 邊吃著漢堡,邊用 iphone 欣賞著電影《泰坦尼克號》中 rose 裸身讓 JACK 作畫的情節。'
$chineseTypesetting->properNoun($text, ['iPhone']);
// output:今天中午,我在 KFC 邊吃著漢堡,邊用 iPhone 欣賞著電影《泰坦尼克號》中 Rose 裸身讓 Jack 作畫的情節。

// 忽略詞彙
$text = 'siri 告訴我,玫瑰對應的英文單詞是 rose。'
$chineseTypesetting->properNoun($text, [], ['Rose']);
// output:Siri 告訴我,玫瑰對應的英文單詞是 rose。

英語專有名詞的資料來自於 Wiktionary採集爬蟲連結

Wiktionary 宣告收錄了 61765 條英語專用名詞,實際爬取量為 61711 條。並使用以下原則進行資料的整理和篩選:

  • 使用 is_numeric() 方法,剔除諸如 007、 等詞彙;
  • 使用 '/\W/' 正則,剔除諸如 ǃXóõ 等詞彙;
  • 剔除 strlen 方法,剔除 A 等單位元組字元詞彙;
  • 剔除跟 HTML、CSS、JavaScript 保留字衝突的詞彙。

清除 HTML 標籤的樣式

use Jxlwqq\ChineseTypesetting\ChineseTypesetting;

$chineseTypesetting = new ChineseTypesetting();

// 清除 Class 屬性
$text = '<p class="class-name">你好,世界。</p>';
$chineseTypesetting->removeClass($text);
// output: <p>你好,世界。</p>

// 清除 ID 屬性
$text = '<p id="id-name">你好,世界。</p>';
$chineseTypesetting->removeId($text);
// output: <p>你好,世界。</p>

// 清除 Style 屬性
$text = '<p style="color: #FFFFFF;">你好,世界。</p>';
$chineseTypesetting->removeStyle($text);
// output: <p>你好,世界。</p>

清除空的段落標籤

use Jxlwqq\ChineseTypesetting\ChineseTypesetting;

$chineseTypesetting = new ChineseTypesetting();

// 清除空的段落標籤
$text = '<p>你好,世界。</p><p></p>';
$chineseTypesetting->removeEmptyParagraph($text);
// output: <p>你好,世界。</p>

清除所有空的標籤

use Jxlwqq\ChineseTypesetting\ChineseTypesetting;

$chineseTypesetting = new ChineseTypesetting();

// 清除所有空的標籤
$text = '<p>你好,世界。<span></span></p>';
$chineseTypesetting->removeEmptyTag($text);
// output: <p>你好,世界。</p>

清除段首縮排

use Jxlwqq\ChineseTypesetting\ChineseTypesetting;

$chineseTypesetting = new ChineseTypesetting();

// 清除段首縮排
$text = '<p>  你好,世界。</p>';
$chineseTypesetting->removeIndent($text);
// output: <p>你好,世界。</p>

首行是否縮排,爭議較大,個人傾向於段首空兩格,會破壞美感的觀點。

使用全部或指定的方法來糾正排版

use Jxlwqq\ChineseTypesetting\ChineseTypesetting;

$chineseTypesetting = new ChineseTypesetting();

// 使用全部方法來糾正排版
$text = '<p class="class-name" style="color: #FFFFFF;"> Hello世界。</p>';
$chineseTypesetting->correct($text);
// output: <p>Hello 世界。</p>

// 使用指定方法來糾正排版
$text = '<p class="class-name" style="color: #FFFFFF;"> Hello世界。</p>';
$chineseTypesetting->correct($text, ['insertSpace', 'removeClass', 'removeIndent']);
// output: <p style="color: #FFFFFF;">Hello 世界。</p>

參考

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章