Carmela 소개Carmela는 PHP, PHP 확장, JAVA, C++ 및 기타 언어(예: 일반 이모티콘 지원)를 기반으로 4섹션으로 구성된 UTF-8 처리 솔루션 세트를 제공합니다. 태그배경: Emoji 표현 문자열이 포함된 UTF-8 형식이 데이터베이스에 직접 삽입됩니다. 데이터베이스가 조정되지 않은 경우 오류가 보고됩니다. 데이터베이스와 테이블의 문자 집합을 utf8mb4_general_ci 로 변경하면 이 문제를 피할 수 있습니다. 그러나 많은 대규모 시스템 및 아키텍처에서 데이터베이스의 문자 집합을 수정하면 PC 측 표시 및 새 데이터와 기존 데이터 간의 호환성 문제 등 많은 문제가 발생할 수 있습니다. 이런 종류의 문제에 대해서는 데이터베이스에 들어가기 전에 교체하고 데이터베이스를 떠난 후 클라이언트 유형에 따라 역으로 교체하는 또 다른 해결책이 있습니다. CarmelaCarmela는 PHP 확장 기반의 4섹션 UTF-8 처리 솔루션을 제공합니다. 이 솔루션은 UTF-8의 3바이트보다 큰 UTF-8 문자를 UBB 모드로 대체할 수 있습니다. 예를 들어 특정 UTF-8 문자 %f0%9f%91%a4(표시의 편의를 위해 이모티콘 태그의 인코딩 모드가 표시됨)를 교체하면 [u]1f464[/u]처럼 보입니다. 다른 요청 클라이언트(iOS, Android, PC)에 따라 동시에 데이터베이스에서 읽는 것은 역방향 교체를 수행합니다. Carmela라는 이름은 "Different Carmela"에서 유래되었습니다. "Different Carmela" 시리즈는 암탉 Carmela와 그녀의 자녀 Carmelido와 Carmen의 모험 이야기를 담고 있습니다. 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: PC 플랫폼으로 전송하기 위해 utf-8 문자열 형식으로 변환된 ubb 태그를 포함합니다. 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: 지정된 문자 길이의 이모티콘 문자가 포함된 문자열 가로채기 . carmela_sububb: ubb 태그가 포함된 문자열에서 지정된 길이의 문자를 가로챕니다. carmela_delstr: 문자열에서 이모티콘 문자 삭제, 비엄격 모드, 3바이트 이모티콘 문자는 삭제할 수 없으며 주로 일부에서 사용됩니다. 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