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

WBOY
リリース: 2016-06-23 13:32:37
オリジナル
11525 人が閲覧しました

Carmela の概要

Carmela は、PHP、PHP 拡張機能、JAVA、C++、および一般的な絵文字タグのサポートなどのその他の言語に基づく 4 セクションの UTF-8 ソリューションのセットを提供します

背景:

UTF-8 形式絵文字表現文字列がデータベースに直接挿入されると、データベースとテーブルの文字セットを utf8mb4_general_ci に変更することでエラーが報告されます。しかし、多くの大規模なシステムやアーキテクチャでは、データベースの文字セットを変更すると、PC 側の表示や新旧データ間の互換性の問題など、多くの問題が発生する可能性があります。この種の問題に対しては、データベースに入る前に置換し、データベースから出た後にクライアントの種類に応じて逆置換を行うという別の解決策もあります。

Carmela

Carmela は、PHP 拡張機能に基づいて 4 セクション UTF-8 を処理するためのソリューションを提供します。これにより、特定の UTF-8 文字 % など、UTF-8 の 3 バイトを超える UTF-8 文字を UBB モードに置き換えることができます。 f0%9f%91%a4 (表示の便宜上、絵文字タグのエンコード モードが表示されています)、[u]1f464[/u] の置換後、およびデータベースから読み取ったときの様子が異なります。リクエストクライアント (iOS、Andriod、PC) は逆置換を行います。カルメラという名前は、「異なるカルメラ」に由来しています。「異なるカルメラ」シリーズの物語は、雌鶏のカルメラとその子供たち、カルメリドとカルメンの冒険物語です。他の人が思いつかないようなことに挑戦すること。

インストール

1. コンパイルしてパッケージ化します

git clone https://github.com/ugg/Carmela<php-bin>/phpize./configure  --with-php-config=<php-path>/php-config-pathmakemake install
ログイン後にコピー
  1. 設定ファイルを変更します

    vim /php.ini

次の内容を追加します

[carmela] extension=carmela.so
ログイン後にコピー

メソッド:

carmela_str2 ubb: 絵文字タグが含まれています 文字列を次のように変換します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 uggubb:This is test [u]1f61c[/u] [u]1f619[/u] by ugg
ログイン後にコピー

carmela_ubb2str: 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 uggstr:This is test(CSDN Emoji不能展示用XXXX代替) by ugg
ログイン後にコピー

carmela_substr:

絵文字を含む文字列から指定された長さの文字を切り出します。

carmela_sububbb:

ubb タグを含む文字列から指定された長さの文字をインターセプトします。

carmela_delstr:

文字列内の絵文字を削除します。非厳密モード。3 バイトの絵文字は削除できません。主に一部で使用されます。

carmela_delubb:

ubb タグを含む文字列から ubb タグを削除します。

パフォーマンス

PHP を使用して 2 つのメソッドをそれぞれ実装し、PHP の str_replace メソッドと PHP で 4 バイトの絵文字を検索して置換し、同じデータを使用してそれぞれテストした結果は次のとおりです。

=========================== 方案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 倍以上向上します。絵文字を文字形式から UBB モードに変換すると、パフォーマンスが 1000 倍向上します。

上記のテストデータは、create_file.php を通じて動的に生成できます。このテスト ケースでは 100 行のデータが生成され、各行には 100 文字が含まれており、100 文字には 3 ~ 10 個の絵文字を含めることができます。テストでは、benchmark.php を直接実行して実行パフォーマンスを確認します。

PC は絵文字表現の表示をどのようにサポートしていますか?

プロジェクト ディレクトリの絵文字ディレクトリの下にある画像ディレクトリを見つけて、Web ルート ディレクトリから絵文字フォルダーを作成し、画像フォルダー全体を絵文字ファイルにコピーして、encode.class.php の carmela_ubb2str メソッドを呼び出します。 PC 上で絵文字表現を表示するために、現在収集されている 845 個の絵文字表現の一部は、一部の新しい絵文字には含まれていません。もちろん、このメソッドは現在 PHP 拡張機能に組み込まれておらず、パフォーマンスは比較的低いです。

ご質問がございましたら、ugg.xchj@gmail.com までお問い合わせください

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