ホームページ  >  記事  >  バックエンド開発  >  php絵文字mysqlエラー問題を解決する方法

php絵文字mysqlエラー問題を解決する方法

藏色散人
藏色散人オリジナル
2021-09-01 09:03:022403ブラウズ

php emoji mysql エラーは、データベースが絵文字をサポートしていないためです。解決策は次のとおりです: 1. 文字セットを utfmb4 に変更します; 2. 絵文字式をエスケープし、呼び出し時に変換して戻します。

php絵文字mysqlエラー問題を解決する方法

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、Dell G3 コンピューター

php emoji mysql エラー問題を解決するにはどうすればよいですか?

小さなプログラムを作成する場合、ユーザーの WeChat 名と名前を保存すると便利です。他の情報を練習記録参照としてデータベースに保存しましたが、WeChat 名に絵文字表現が含まれている場合、その表現をデータベース フィールドに保存できないことがわかりました。以前に Access データベースを使用したときは、顔文字をフィールドに直接保存できました。

原因のトラブルシューティング:

まず、PHP プログラムが原因かどうかをテストしました。post を使用して絵文字表現を含むコンテンツを送信しました。送信されたコンテンツは正常で、コンテンツは正常でした投稿は「エモい表現があります」でした。

php絵文字mysqlエラー問題を解決する方法

次: このデータをデータベースに挿入してみます。データベースへの挿入に成功すると、式が ? 記号に変わっていることがわかりました。

php絵文字mysqlエラー問題を解決する方法

問題はこの時点で基本的に理解されています。つまり、私のデータベースはこの式をサポートしていません。 ######知らせ!知らせ!注: これは sql-front ツールを使用して実行した結果ですが、PHP プログラムで実行すると、絵文字式の背後にあるすべてのコンテンツが正常に保存されない可能性があります。例:

[「絵文字」タイトル]絵文字記号はコンテンツの先頭にあり、挿入されたコンテンツは直接空です。

[前の「絵文字」タイトル]挿入されたコンテンツは空です。 content が [Front]、

絵文字表現とその絵文字表現の後ろのコンテンツは通常は挿入できません。

解決策:

方法 1: インターネットでデータベースの文字セットのエンコーディングを変更するという情報を調べて、文字セットを utfmb4 に変更してみてください。別のデータを挿入して、式が実際にデータベースに保存されていることを確認します。

データベースの文字セットが変更された場合でも、PHP プログラムはそれに応じて文字セットを変更する必要があることに注意してください。そうでなければ、まだ???。 php絵文字mysqlエラー問題を解決する方法

定義方法は次のとおりです: mysqli_query($conn,"SET NAMES UTF8MB4");

方法 2: 絵文字表現をエスケープし、呼び出し時に変換します。戻る。これは、エスケープ用とアンチエスケープ用の 2 つの関数を定義することに他なりません。 //絵文字エスケープphp絵文字mysqlエラー問題を解決する方法

function en_emoji($str){
$en_str='';
$length=mb_strlen($str,'utf-8');
for($i=0;$i=4){
$en_str.=''.rawurlencode($tmp_str).'';
}else{
$en_str.=$tmp_str;
}
}
return $en_str;
}
//反转义为emoji
function de_emoji($str){
$de_str=preg_replace_callback('|(.*?)|',function($matches){
return rawurldecode($matches[1]);
},$str);
return $de_str;
}

利用方法も非常に簡単で、データベースにデータを保存するときにエスケープし、読み出し・表示するときに逆にします。

en_emoji($str) の結果は次のようになります:

読み取りおよび表示するときに de_emoji($str) を使用するだけです。 php絵文字mysqlエラー問題を解決する方法

2 つのソリューションの比較:

方法 1: データベースだけでなくプログラム コードも含めて文字セットを変更します。しかし、なんというか、データベースは将来 utf8mb4 にアップグレードされる可能性があります。

方法 2: 関数メソッドを使用すると、プログラムを変更するだけで済み、データベースに触れる必要はありません。 2つの機能が実装されています。ただ、データベースの内容と比べると、若干文字化けしているような気がします。そして、この記事を書いているときに、データ保存時に en_emoji を使用したため、すべての表現がエスケープコードになっていることに気づき、記事の内容を表示するときにアンチエスケープ de_emoji を使用したところ、今度は、当初作成したエスケープ内容が後になって判明しました。私の記事で表現したかったことも逃げられていました。上記の結果のパフォーマンスを置き換えるには画像しか使用できないことがわかります。

結論: 絵文字の使用を減らします。もちろん、データベースを自分で作ってプログラムを書く場合は、方法 1 で utf8mb4 を設定する方が完璧です。しかし、正直に言うと、私はこの記事を書いているときだけエスケープ機能を使用しており、無用なトラブルを避けるために、書いた後はエスケープ機能を停止しました。

推奨: 「

PHP ビデオ チュートリアル

以上がphp絵文字mysqlエラー問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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