Carmela は、PHP、PHP 拡張機能、JAVA、C++、および一般的な絵文字タグのサポートなどのその他の言語に基づく 4 セクションの UTF-8 ソリューションのセットを提供します
UTF-8 形式絵文字表現文字列がデータベースに直接挿入されると、データベースとテーブルの文字セットを utf8mb4_general_ci に変更することでエラーが報告されます。しかし、多くの大規模なシステムやアーキテクチャでは、データベースの文字セットを変更すると、PC 側の表示や新旧データ間の互換性の問題など、多くの問題が発生する可能性があります。この種の問題に対しては、データベースに入る前に置換し、データベースから出た後にクライアントの種類に応じて逆置換を行うという別の解決策もあります。
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
設定ファイルを変更します
vim /php.ini
次の内容を追加します
[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";
str:This is test xxxx(CSDN Emoji不能展示用XXXX代替) by uggubb: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";
ubb:This is test [u]1f61c[/u] [u]1f619[/u] by uggstr:This is test(CSDN Emoji不能展示用XXXX代替) by ugg
絵文字を含む文字列から指定された長さの文字を切り出します。
ubb タグを含む文字列から指定された長さの文字をインターセプトします。
文字列内の絵文字を削除します。非厳密モード。3 バイトの絵文字は削除できません。主に一部で使用されます。
ubb タグを含む文字列から ubb タグを削除します。
=========================== 方案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
上記のテストデータは、create_file.php を通じて動的に生成できます。このテスト ケースでは 100 行のデータが生成され、各行には 100 文字が含まれており、100 文字には 3 ~ 10 個の絵文字を含めることができます。テストでは、benchmark.php を直接実行して実行パフォーマンスを確認します。
PC は絵文字表現の表示をどのようにサポートしていますか?
ご質問がございましたら、ugg.xchj@gmail.com までお問い合わせください