ホームページ  >  記事  >  バックエンド開発  >  現在mysqlに保存されている絵文字表現は何ですか?

現在mysqlに保存されている絵文字表現は何ですか?

WBOY
WBOYオリジナル
2016-06-23 13:44:281376ブラウズ

mysql に保存されている絵文字表現が ??? になった ネットの情報によると、mysql の文字セットを utf8mb4 に変更しましたが、依然として無効で文字化けして表示されます。 。誰かこれに遭遇したことがありますか?


ディスカッションに返信 (解決策)

絵文字表現は utf-16 エンコードに拡張されています
絵文字表現のテキストを含む Base64 エンコード文字列を投稿してください
、問題の解決に役立つかどうか確認してください

絵文字表現 これは拡張 utf-16 エンコーディングです
絵文字表現のテキストを含む Base64 エンコード文字列を投稿して、問題の解決に役立つかどうかを確認できます

これは、表現の Base64 ビット保存データです。 8J+YhPCfmIM=。バージョンを見てください。多くのアプリケーションがこの顔文字入力に対応していますが、保存方法がわかりません。
utf8mb4 文字セットを使用できるはずですが、なぜ使用できないのかわかりません

テキストに絵文字がそれほど多くないことを考慮して、

$text = base64_decode('8J+YhPCfmIM=');echo $text = preg_replace_callback('/[\xf0-\xf7].{3}/', function($r) { return '@E' . base64_encode($r[0]);}, $text);
@ を保存する前に正規表現に置き換えることができます。 E8J+YhA==@E8J+Ygw= =

逆変換すればいいだけです
$s = preg_replace_callback('/@E(.{6}==)/', function($r) {return base64_decode($r[1]);}, '@E8J+YhA==@E8J+Ygw==');var_dump(base64_decode('8J+YhPCfmIM=') == $s);
bool(true)


utf8mb4 文字セットを使えばいいということになりますが、理由はわかりません。できません

本文に絵文字が少ないことを考慮して、正規表現を使用できます 置き換えて保存します

$text = base64_decode('8J+YhPCfmIM=');echo $text = preg_replace_callback('/[\xf0-\xf7].{3}/', function($r) { return '@E' . base64_encode($r[0]);}, $text);
@E8J+YhA==@E8J+Ygw==

あとは逆変換して完了です
$s = preg_replace_callback('/@E(.{6}==)/', function($r) {return base64_decode($r[1]);}, '@E8J+YhA==@E8J+Ygw==');var_dump(base64_decode('8J+YhPCfmIM=') == $s);
bool(本当)

はい、とても憂鬱です。インターネット上の人々は、utf8mb4 に設定するだけで機能すると言っていますが、私の場合は機能しません。 mysqlのバージョンは5.6です。 。 。 。 、ワンプサーバー環境。環境問題なのでしょうか?


先生、私も同じ問題に遭遇しました、結局どうやって解決しましたか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。