首页 后端开发 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标签支持背景:UTF-8格式含有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

  • 添加以下内容[carmela] extension=carmela.so 方法:carmela_str2ubb: 包含emoji标签的字符串转换成ubb模式,替换后的样子[u]1f464[/u]。一个例子:$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"; 输出结果:str:This is test xxxx(CSDN Emoji不能展示用XXXX代替) by ugg ubb:This is test [u]1f61c[/u] [u]1f619[/u] by ugg carmela_ubb2str:包含ubb标签转换为utf-8字符串格式,针对PC平台的转移,可以参考encode.class.php中的carmela_ubb2str方法。一个例子:$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"; 输出结果:ubb:This is test [u]1f61c[/u] [u]1f619[/u] by ugg str:This is test(CSDN Emoji不能展示用XXXX代替) by uggcarmela_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表情。

    Python内建类型str源码分析 Python内建类型str源码分析 May 09, 2023 pm 02:16 PM

    1Unicode计算机存储的基本单位是字节,由8个比特位组成。由于英文只由26个字母加若干符号组成,因此英文字符可以直接用字节来保存。但是其他语言(例如中日韩等),由于字符众多,不得不使用多个字节来进行编码。随着计算机技术的传播,非拉丁文字符编码技术不断发展,但是仍然存在两个比较大的局限性:不支持多语言:一种语言的编码方案不能用于另外一种语言没有统一标准:例如中文就有GBK、GB2312、GB18030等多种编码标准由于编码方式不统一,开发人员就需要在不同编码之间来回转换,不可避免地会出现很多错

    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__和__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