PHP ベースの絵文字処理メソッドを拡張するクラス ライブラリの紹介

WBOY
リリース: 2016-08-08 09:22:41
オリジナル
964 人が閲覧しました
Carmela の紹介Carmela は、PHP、PHP 拡張機能、JAVA、C++、および一般的な絵文字タグのサポートなどのその他の言語に基づいて 4 セクションの UTF-8 を処理するための一連のソリューションを提供します背景: UTF-8 形式 絵文字表現を含む文字列はデータベースに直接挿入されます。データベースが調整されていない場合、この問題はデータベースとテーブルの文字セットを utf8mb4_general_ci に変更することで回避できます。しかし、多くの大規模なシステムやアーキテクチャでは、データベースの文字セットを変更すると、PC 側の表示や新旧データ間の互換性の問題など、多くの問題が発生する可能性があります。この種の問題には、データベースに入る前に置換し、データベースから出た後にクライアントのタイプに応じて逆置換するという別の解決策もあります。 CarmelaCarmela は、PHP 拡張機能に基づいて 4 セクション UTF-8 を処理するためのソリューションを提供します。これにより、特定の UTF-8 文字 % など、UTF-8 の 3 バイトを超える UTF-8 文字を UBB モードに置き換えることができます。 f0%9f%91%a4 (表示の便宜上、絵文字タグのエンコード モードが表示されています)、[u]1f464[/u] の置換後、およびデータベースから読み取ったときの様子が異なります。リクエストクライアント (iOS、Andriod、PC) は逆置換を行います。カルメラという名前は、「異なるカルメラ」に由来しています。「異なるカルメラ」シリーズの物語は、雌鶏のカルメラとその子供たち、カルメリドとカルメンの冒険物語です。他の人が思いつかないようなことに挑戦すること。 Installation11。 ubb モードへの移行、[u]1f464[/u] の置換後の様子。 例: git clone https://github.com/ugg/Carmela /phpize ./configure --with-php-c/php-config-path make make install 出力結果: [carmela] extension=carmela.so carmela_ubb2str: PC プラットフォームの転送の場合は、encode.class.php の carmela_ubb2str メソッドを参照できます。
  • 例:

    $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_substr: 絵文字を含む文字列から指定された長さの文字を切り出します。 carmela_sububbb: 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

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

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート