今年上半年疫情在家辦公期間發現Emoji有了更新,于是進行了Emoji 13.0内容的更新和添加,而下半年9月份就有了Emoji 13.1版本推出,我們拖後了一段時間,11月份才進行補充和更新,現在把一些數據來源及更新工作進行記錄,以便以後再有新版本出的時候能更順利地進行補充和更新。
一、Emoji v13.1數據來源
主要數據來源無疑就是Unicode官方網站:
- Unicode® Emoji Charts v13.1(首頁)
- Unicode Emoji 數據文件 v13.1 (emoji-sequences.txt, emoji-zwj-sequences.txt, emoji-test.txt, ReadMe.txt)
- 相關數據文件 (還是v13.0的,沒有v13.1的,emoji-data.txt, emoji-variation-sequences.txt)
- Emoji 列表, v13.1 (不含膚色變體,1816個)
- 完整 Emoji 列表, v13.1 (包含膚色變體,1816個)
- 完整 Emoji 修飾符序列, v13.1 (1705個)
- Emoji 數量, v13.1 (全部3521個)
- Emoji 排序, v13.1 (1821個)
- Unicode® 技術标準 #51
- Emoji 版本, v13.1(新增117(emoji 13.0) + 217(emoji 13.1) = 334個)
- Emoji Versions & Sources
- Emoji Presentation Sequences
- Text vs Emoji
- Emoji Default Style (html)
- Emoji Default Style (text)
我主要處理的是3個數據文件,編寫3個PHP程序來分别處理:
- 13.1.emoji-test.txt.php(處理emoji-test.txt,添加新Emoji,設置qualified_status,程序後面添加循環檢查table_all中内容,删除不符合這個文件的屬性數據)
- 13.1.emoji-zwj-sequences.txt.php(處理emoji-zwj-sequences.txt,處理5個分類下的零寬連接符序列,程序最後部分也加入循環對比table_all中内容的程序)
- 13.1.emoji-sequences.txt.php(處理emoji-sequences.txt,設置type_field,程序最後添加循環table_all中所有符号,檢查 type_field 是否相同,不同的進行修改)
二、CLDR通用語言倉庫翻譯導入
這3個文件處理後就新增了幾百個v13.1的Emoji,但隻有英文名稱,下一步就是添加翻譯:
- 下載cldr common v38.0,解壓上傳annotations和annotationsDerived下的各種語言xml文件到服務器
- 修改annotations-import.php 來讀取 cldr-common-38.0/annotations中的文件,對比short name和keywords,導入翻譯内容
- 修改annotations-derived-import.php 來讀取 cldr-common-38.0/annotationsDerived中的文件,對比short name和keywords,導入翻譯内容
- 新建fill-more-emoji.php,整合以前的temp.php, temp2.php, temp3.php, temp4.php,批量補充更多缺少short name和keywords翻譯的emoji(帶有FE0F的Emoji沒有short_name就嘗試用不帶FE0F的Emoji的short_name來補充、帶有FE0F的Emoji沒有keywords就嘗試用不帶FE0F的Emoji的keywords來補充)
- 其它雜項:人工檢查缺少short name和keywords的Emoji、補充emoji_all表有而各語言表缺少一個emoji'😶🌫️'、keywords有超過256個字符的情況修改字段長度等
三、其它檢查和處理:
- 編寫check_emoji_all_update.php,檢查emoji_all表中内容,符合設定條件的進行更新操作,用上述程序檢查emoji version,主要是qualified_status不是fully-qualified和component的emoji_version設置為空,解決大部分問題,少部分問題逐個版本核對、人工修改,最後完全正确
- 修改上述程序,用于unicode version的核對,但發現無法核對匹配,因為有些非emoji字符隻在我們網站(例如:多米諾骨牌、撲克牌、麻将、中國象棋、國際象棋等),有些非emoji字符隻在其它emoji網站(例如:White Circle with Dot Right、Cross Pommee等),而且其它emoji網站的unicode version列表頁面中的emoji有些是帶有fe0f的,最後放棄核對,隻糾正、補充了少量明顯問題
- 上傳emoji v13.1下載的html文件到emoji/13.1/web/下,準備用程序來進行後續處理
- 重新排序,編寫13.1.emoji-list-html-to-list-number.php,讀取list.html,更新list_number,模拟可以運行了,但未實際執行,因為雖然數量上一個版本是1814,一個版本是1816,相差不大,但包含的emoji至少有幾十個差異,順序、分類也都變了,怕影響首頁及各分類顯示,準備14.0出來(13.1得到全面支持)的時候再更新到13.1
- 重新分類,也是因為與13.0相差好幾十個,怕影響首頁及各分類顯示,準備14.0出來(13.1得到全面支持)的時候再更新到13.1
四、圖片獲取補充
- 運行 get-files-from-urls.php,下載html頁面保存到文件
- 運行 get-images-from-files.php,獲取各個平台各個版本的emoji圖片,需要時間很長,持續很多個小時運行,如果有錯誤、失敗的,重新運行幾次,直到錯誤、失敗數量減到最小
- 整理對比下載的各個平台目錄,下屬各種尺寸,再下屬各個版本,找出n個平台有更新,複制到對應的網站圖片顯示目錄中就可以,Linux下用\cp這樣的命令複制(遇到同名的自動覆蓋),以後可以考慮也編寫一個php程序來進行複制和統計(2021-9-13補充,新增copy-images-to-web.php程序,專用于更新圖片的複制、覆蓋、統計等工作)
五、結果
217個Emoji v13.1的Emoji列表:https://www.emojiall.com/zh-hans/emoji-version/13.1,點擊其中某個鍊接進入查看某個Emoji詳情。
评论2
博主的PHP學的很好吧?這些功能基本都是自己寫的嗎?
博主的PHP學的很好吧?這些功能基本都是自己寫的嗎?不算很好,用Drupal後被迫自學的PHP
不算很好,用Drupal後被迫自學的PHP,簡單的東西能自己編寫,免得要找其他程序員幫忙也是麻煩