ここ数か月間、私は WeChat の開発をたくさん行っており、WeChat のニックネームを保存することが不可欠です
しかし、このいまいましい WeChat はニックネームとして絵文字表現をサポートしています。これは少し面倒です
一般的な Mysql テーブルを設計するときは、UTF8 文字セットが使用されます。絵文字を含むニックネームフィールドを挿入すると、ニックネームフィールドが消え、フィールド全体が空の文字列になります。どうしたの?
Mysql の utf8 文字セットは 3 バイト、絵文字は 4 バイトであるため、ニックネーム全体を保存できないことがわかりました。何をするか?いくつかの方法を紹介します
1. utf8mb4 文字セットを使用します
mysql バージョン >=5.5.3 の場合は、utf8 を直接アップグレードできます utf8mb4 文字セットの場合
この 4 バイト utf8 エンコーディングは、古い 3 バイト utf8 文字セットと完全に互換性があり、絵文字表現を直接保存できます。これが最良の解決策です。
いくつかのレビューを読みましたが、バイトの増加はほとんど無視できます
2. Base64 エンコーディングを使用します
何らかの理由がある場合、utf8mb4 を使用できない場合は、次のことができます。
base64_encode などの関数を使用してエンコードされた絵文字は、utf8 バイトセットのデータテーブルに直接格納され、取り出すときにデコードできます。
3. 絵文字表現を削除する
絵文字表現は厄介なもので、保存できても完全に表示されない場合があります。 PCやAndroidなどiOS以外のプラットフォームでも。絵文字を表示する必要がある場合は、大量の絵文字画像を用意し、サードパーティのフロントエンド ライブラリを使用する必要があります。それでも、絵文字画像が不十分なために絵文字画像を表示できない状況が発生する可能性があります。ほとんどのビジネス シナリオでは、絵文字は必要ありません。これを適切に削除して、さまざまなコストを節約することを検討できます。何度も一生懸命グーグル検索した結果、最終的に信頼性が高く使用可能なコードを見つけました:// 过滤掉emoji表情 function filterEmoji($str) { $str = preg_replace_callback( '/./u', function (array $match) { return strlen($match[0]) >= 4 ? '' : $match[0]; }, $str); return $str; }基本的な考え方は、文字列 For をトラバースすることです。各文字の場合、文字長が 4 バイトの場合は削除されます。
以上がPHP開発における絵文字表現を伴ういくつかの処理方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。