如何快速在文章中英文數字間自動添加空格
- 2019 年 12 月 16 日
- 筆記

在中文、英文、數字之間用空格隔開,觀感和閱讀上顯得更加分明,也就是說整體的排版會更加的好看,但是如果在編寫文章的時候去添加,就會顯得特別的繁瑣和降低編輯或寫作效率了,不過為了養成習慣,還是推薦在編寫的時候手動添加空格
這篇文章是給懶人朋友提供福利,不用手動添加空格了,首先我們來看一下什麼時候需要添加空格
1. 中英文之間需要增加空格 2. 中文與數字之間需要增加空格 3. 數字與單位之間需要增加空格 4. 全形標點與其他字元之間不加空格
以下分別對於普通的Html文章、WordPress文章以及使用MarkDown生成的文章說明
WordPress
WordPress我們先說使用PHP來解決的方法,有2種方案,任選一種就可以,在主題的functions.php文件中添加以下程式碼
1. 不直接在寫入資料庫前執行,而是當 WordPress 輸出文章內容的時候執行
//WordPress 文章中英文數字間自動添加空格(不寫入資料庫) add_filter( 'the_content','fanly_post_content_autospace' ); function fanly_post_content_autospace( $data ) { $data = preg_replace('/([x{4e00}-x{9fa5}]+)([A-Za-z0-9_]+)/u', '${1} ${2}', $data); $data = preg_replace('/([A-Za-z0-9_]+)([x{4e00}-x{9fa5}]+)/u', '${1} ${2}', $data); return $data; }
2. 在 WordPress 後台編輯時執行,也就是當我們發布、更新、保存文章的時候就會自動執行,寫入資料庫的內容都將是自動添加了空格的,並且處理的對象為文章標題與文章內容。僅只對新發布的文章生效,之前發布的不生效
//WordPress 文章中英文數字間自動添加空格(寫入資料庫) add_filter( 'wp_insert_post_data', 'fanly_post_data_autospace', 99, 2 ); function fanly_post_data_autospace( $data , $postarr ) { $data['post_title'] = preg_replace('/([x{4e00}-x{9fa5}]+)([A-Za-z0-9_]+)/u', '${1} ${2}', $data['post_title']); $data['post_title'] = preg_replace('/([A-Za-z0-9_]+)([x{4e00}-x{9fa5}]+)/u', '${1} ${2}', $data['post_title']); $data['post_content'] = preg_replace('/([x{4e00}-x{9fa5}]+)([A-Za-z0-9_]+)/u', '${1} ${2}', $data['post_content']); $data['post_content'] = preg_replace('/([A-Za-z0-9_]+)([x{4e00}-x{9fa5}]+)/u', '${1} ${2}', $data['post_content']); return $data; }
普通的Html文章
這裡就需要祭出大殺器了,在WordPress當中也是可以直接使用的,就是pangu.js。使用也是十分方便,我們來看一下
<script src="https://cdn.staticfile.org/pangu/4.0.7/pangu.min.js"></script> <script> pangu.spacingPage(); </script>
上面是最基礎的操作,全局都進行自動加空格處理,還有另外一些操作
pangu.spacingElementById('main'); //在id=main的區域進行自動加空格處理 pangu.spacingElementByClassName('comment'); //在class=comment的區域進行自動加空格處理 pangu.spacingElementByTagName('p'); //在標籤p裡面進行自動加空格處理
對應的標籤屬性可以根據你的實際系統中的修改
MarkDown
還有一些文檔系統,是使用MarkDown語法來生成的文章,比如docsify,我使用了docsify寫了一個編程筆記的網站,把一些常用的資訊記錄一下,地址是https://notes.qq52o.me/
對於MarkDown的文檔,其實pangu是不支援的,但是docsify中可以使用,因為他提供了鉤子,可以在hook.doneEach
解析MarkDown的時候進行調用,所以我們可以這樣寫
(function(u, c) { var d = document, t = 'script', o = d.createElement(t), s = d.getElementsByTagName(t)[0]; o.src = u; if (c) { o.addEventListener('load', function(e) { c(e); }); } s.parentNode.insertBefore(o, s); })('//cdn.staticfile.org/pangu/4.0.7/pangu.min.js', function() { pangu.spacingPage(); });
而且還是非同步載入,豈不美滋滋?
沈唁志,一個PHPer的成長之路!
任何個人或團體,未經允許禁止轉載本文:《如何快速在文章中英文數字間自動添加空格》,謝謝合作!