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
作者最新文章
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31