首頁 後端開發 php教程 基於PHP擴充一種處理Emoji方法的類別庫介紹

基於PHP擴充一種處理Emoji方法的類別庫介紹

Aug 08, 2016 am 09:22 AM
emoji quot str

Carmela介紹Carmela提供基於PHP,PHP擴展,JAVA,C++等語言的一套處理4四節UTF-8解決方案,例如常見Emoji標籤支援格式背景::含有Emoji表情字串直接插入資料庫,如果資料庫未做調整會提示報錯,透過更改資料庫和表格的字元集為utf8mb4_general_ci,可以避免這種問題。但是,在許多大型系統和架構中,修改資料庫的字元集可能會引發很多的問題,例如PC端展示,新舊資料相容問題。針對這類問題,還有另一種解決方案,入庫前替換,出庫後依客戶端類型做反向替換。 CarmelaCarmela提供基於PHP擴展一套處理4四節UTF-8解決方案,可以把UTF-8中大於3個字節的UTF-8字符替換成ubb模式,例如某UTF-8字符% f0%9f%91%a4(為了展示方便,展示emoji標籤的encode模式),替換後的樣子[u]1f464[/u],同時從資料庫讀出時,根據不同的請求客戶端(iOS,Andriod ,PC)做反向替換。 Carmela的名字來源《不一樣的卡梅拉》,《不一樣的卡梅拉》系列故事講的是母雞卡梅拉和她的兒女們卡梅利多和卡門的歷險故事,卡梅拉家族裡的每個人都是那樣的與眾不同,敢於幻想,更敢於嘗試別人不敢想的事。 安裝1.編譯打包git clone https://github.com/ugg/Carmela /phpize ./configure --with-php-c/php-config-path make make install
  • 修改設定檔

    vim /php.ini

  • ,被替換後的樣子[u]1f464[/u]。 一個例子:[carmela] extension=carmela.so 輸出結果:$str = urldecode("This is test %F0%9F%98%9C+%F0%9F%98%99 by ugg"); echo "str:".$str."\n"; echo "ubb:".carmela_str2ubb($str)."\n"; carmela_ubb2str:包含ubb標籤轉換為utf-8字串格式,針對PC平台的轉移,可以參考encode.class.php中的carmela_ubb2str方法。 一個例子:str:This is test xxxx(CSDN Emoji不能展示用XXXX代替) by ugg ubb:This is test [u]1f61c[/u] [u]1f619[/u] by ugg 輸出結果:$str = urldecode("This is test %F0%9F%98%9C+%F0%9F%98%99 by ugg"); $str = carmela_str2ubb($str); echo "ubb:".$str."\n"; echo "str:".carmela_ubb2str($str)."\n"; carmela_substr:截取包含emoji字元的字串指定長度字元。 carmela_sububb:截取包含ubb標籤的字串的指定長度字元。 carmela_delstr:刪除字串中的emoji字符,非嚴格模式,3位元組的emoji字符無法刪除,主要用在一些。 carmela_delubb:刪除包含ubb標籤字串中的ubb標籤。 性能使用PHP分别实现了两种方法,分别使用PHP的str_replace方法和PHP查找四字节emoji,进行替换的方法,以及PHP扩展方式,使用相同数据分别进行测试,测试效果如下。=========================== 方案1:PHP str_replace方式 ========================= =========== EMOJI TO STRING ========== TIME:781.94ms,处理行数: 100,处理字数:10100,处理字节数:31028 平均每行处理时间:7.819ms =========== STRING TO EMOJI ========== TIME:118.566ms,处理行数: 100,处理字数:18710,处理字节数:37793 平均每行处理时间:1.186ms =========================== 方案2:PHP字符查找方式 ========================= =========== EMOJI TO STRING ========== TIME:51.526ms,处理行数: 100,处理字数:10100,处理字节数:31028 平均每行处理时间:0.515ms =========== STRING TO EMOJI ========== TIME:27.959ms,处理行数: 100,处理字数:23092,处理字节数:41236 平均每行处理时间:0.28ms =========================== 方案3:PHP扩展方式 ========================= =========== EMOJI TO STRING ========== TIME:0.721ms,处理行数: 100,处理字数:10100,处理字节数:31028 平均每行处理时间:0.007ms =========== STRING TO EMOJI ========== TIME:0.956ms,处理行数: 100,处理字数:20308,处理字节数:38452 平均每行处理时间:0.01ms 从以上测试效果上来看,str_replace方式,性能非常的差。使用PHP直接编写替换函数方式,性能提升10倍多,而采用扩展方式后,性能提升明显,在把emoji从字符形式转换为ubb方式时,性能提升1000倍。以上测试数据通过create_file.php可以动态生成。本测试用例,生成100行数据,每行100个字符,100字符中可以包含3-10个emoji字符,进行测试的,直接运行benchmark.php 查看运行性能。原理处理四字节的emoji原理非常简单,通过字符对比找到emoji字符进行替换。难点就是在基本原理上如何提升性能,如何快速查找,替换。PHP扩展方式,为大家提供了一种思路,可以参考这种思路实现java,C#,js等等版本的。PC如何支持EMoji表情展示?在项目目录中的emoji目录下找到images目录,从web根目录创建emoji文件夹,把images文件夹整个拷贝到emoji文件下,调用encode.class.php里面的carmela_ubb2str方法,Util_Encode::carmela_ubb2str($str, "PC"); 即可在PC上展示Emoji表情,目前收集到的845个emoji表情,一些新的表情符号并没有纳入其中,当然,目前这种方法并没有写入PHP扩展中,性能相对来说并不高。Contact ugg.xchj@gmail.com for all questions

    以上就介绍了基于PHP扩展一种处理Emoji方法的类库介绍,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    蘋果發表 iOS 17.4 Beta 1,推出 118 個新表情符號,包括鳳凰、青檸等 蘋果發表 iOS 17.4 Beta 1,推出 118 個新表情符號,包括鳳凰、青檸等 Jan 26, 2024 am 08:24 AM

    1月26日消息,根據國外科技媒體emojipedia報道,蘋果在今天發布的iOS17.4Beta1更新中,面向27個歐盟國家測試開放側載、第三方應用商店等重大改進之外,還新增了多個Emoji表情符號。 iOS17.4Beta1更新增加了包括鳳凰、青檸、上下搖頭的笑臉,一系列指明方向的人物表情符號,來自Unicode於2023年9月提出的Emoji15.1更新。附上完整Emoji如下:本次更新共新增118個Emoji,包括6個全新Emoji,4個無性別區分的家庭Emoji。另外還有6個現有人物表情

    Win10教育版怎麼關閉emoji Win10教育版怎麼關閉emoji Feb 24, 2024 pm 01:55 PM

    emoji表情作為Win10教育版最新添加的輸入法功能,很多可愛的表情讓聊天不在枯燥,但是有的用戶在使用快捷鍵的時候會彈出該界面,今天小編為大家帶來Win10教育版關閉emoji方法介紹。 Win10教育版怎麼關閉emoji1、首先需要右鍵點選下方工作列右側的輸入法。 2、在彈出的選項框中選擇設置,進入語言設定介面。 3、選擇介面中的“按鍵”選項並捲動到最底端,能夠找到“打開表情及符號面板”,這裡可以關閉emoji表情。 4.如果還安裝了其他輸入法的話,可以從Windows設定進入「設定和語言」介面,隨後選

    php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

    php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

    華為emoji怎麼輸入 華為emoji怎麼輸入 Sep 26, 2023 pm 01:31 PM

    華為emoji輸入方法:1​​、華為手機自帶了一個emoji表情鍵盤,可以在輸入文字的時候切換到該鍵盤來輸入emoji表情;2、在需要輸入emoji的地方,長按輸入框,然後選擇「輸入法設定”,在輸入法設定中,可以找到並選擇系統自帶的emoji輸入法;3、可以下載並使用第三方的emoji表情鍵盤,然後,可以在鍵盤上瀏覽並選擇想要使用的emoji表情。

    iOS 15.4 及iPadOS 15.4 Beta 1 公測版登場戴口罩也可用Face ID iOS 15.4 及iPadOS 15.4 Beta 1 公測版登場戴口罩也可用Face ID Apr 13, 2023 pm 11:01 PM

    Apple 正式向大眾推出iOS 15.4 及iPadOS 15.4 Beta 1,版本為19E5209h。這次官方的更新說明中列出眾多改變,包括加入新功能。支援口罩 Face IDApple 在iOS 15.4 中加入了「口罩Face ID」,iPhone 會在使用者戴口罩時透過辨識眼睛周圍區域的獨特特徵來進行認證。留意,使用者必須使用iPhone 12 或以上的型號iPhone 才可使用此功能。加入112 個新Emoji 表情圖示iOS 15.4 Beta 1 正式支援Emoji 14。當中加

    Python內建類型str原始碼分析 Python內建類型str原始碼分析 May 09, 2023 pm 02:16 PM

    1Unicode電腦儲存的基本單位是位元組,由8個位元組組成。由於英文只由26個字母加若干符號組成,因此英文字元可以直接用位元組來保存。但是其他語言(例如中日韓等),由於字元眾多,不得不使用多個位元組來進行編碼。隨著電腦科技的傳播,非拉丁文字元編碼技術不斷發展,但是仍有兩個比較大的限制:不支援多語言:一種語言的編碼方案不能用於另一種語言沒有統一標準:例如中文就有GBK、GB2312、GB18030等多種編碼標準由於編碼方式不統一,開發人員就需要在不同編碼之間來回轉換,不可避免地會出現很多錯

    Python中__str__和__repr__有什麼異同點 Python中__str__和__repr__有什麼異同點 Apr 29, 2023 pm 07:58 PM

    __str__和__repr__有什麼異同?字串的表示形式我們都知道,Python的內建函數repr()能夠把物件用字串的形式表達出來,方便我們辨認。這就是“字串表示形式”。 repr()就是透過__repr__這個特殊方法得到一個物件的字串表示形式的。如果沒有實作__repr__,當我們在控制台裡列印一個向量的實例時,得到的字串可能會是。 >>>classExample:pass>>>print(str(Example()))>>>

    mysql emoji 亂碼怎麼辦 mysql emoji 亂碼怎麼辦 Feb 16, 2023 am 10:01 AM

    mysql emoji亂碼的解決方法:1、透過「show create table test ENGINE=InnoDB DEFAULT CHARSET=utf8mb4」指令查看mysql表編碼;2、透過「set names utf8mb4;」設定讀取編碼為「utf8mb4」即可。

    See all articles