PHPのWeChatユーザー情報インターフェースのニックネームの絵文字表現をmysqlに保存するにはどうすればよいですか?
天蓬老师
天蓬老师 2017-05-16 13:06:54
0
3
961

タイトルに示されているように、現在、取得された文字列が Unicode エンコードに変換され、テーブルに格納されることが確認されています。現在発生している問題は、json_encode() 関数の場合です。は複数回エスケープして保存するために使用されます。データベース内の文字列には二重引用符が複数層あります。一度だけエスケープしてデータベースに保存すると、以下に示すように、引用符はありませんが、記号が欠落します。その後にキーコードが続きます。初心者は正しい保存方法を確認できます。

データベースの文字セットを utf8mb4 に変更する必要があるという回答を見ました。この文字セットの代わりに utf-8 を使用できないかどうか知りたいのですが。初心者は、my.ini のグローバル文字セットを変更する方法しか知りませんが、このフィールドを変更する方法は知りません。

最新の更新: テスト後、utf8mb4 はデータベースにデータを保存できますが、まだ問題があります。WeChat ニックネームの前後に式があり、途中にテキストがある場合、最初の式しか保存できません。最後の式はデータベースに保存できます。いくつかの紆余曲折を経て、下の図の青いバーで選択された文字列を保存するために utf8 を使用しました。 - ユーザーのニックネームが破壊されないようにフロントエンドで処理します。もっと良い方法がある場合は、メッセージを残してください。

< /p>

キーコード:

function weixininfo($code){
    $userinfo = getJson($get_user_info_url);
  $wxif = new wxinfo($userinfo["openid"],$userinfo["ニックネーム"],$userinfo["性別"],$userinfo["headimgurl"]);
  クラスEmp {};
  $obj = 新しい Emp();
  $obj->結果 = 0;
  $obj->info = $wxif;
  $obj を返します。
}

$コード = $_GET['コード'];
$data = weixininfo($code);
$info = $data->info;
$openid = $info->openid;
$nickname = $info->ニックネーム;
$name = json_encode($nickname);
$セックス = $info->セックス;
$headurl = $info->headurl;
$sqls = "mytest(openid,nickname,sex,headurl) VALUES ('$openid',$name,'$sex','$headurl') に挿入します";
if($conn->query($sqls) === true){
    セッション開始();
    $_SESSION["openid"]=$openid;
    $conn->close();
    // $uri ="./index.php";
    // header( "場所: $uri" );
}それ以外{
    echo "失敗しました:".$sqls."<br>".$conn->error;
};
function getJson($url){
    $ch =curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output =curl_exec($ch);
    カール_クローズ($ch);
    return json_decode($output, true);
}
クラス wxinfo {
  パブリック $openid;
  パブリック $ニックネーム;
  パブリック$セックス;
  パブリック $headurl;

  パブリック関数 __construct($openid,$nickname,$sex,$headurl){
    $this->openid = $openid;
    $this->ニックネーム = $ニックネーム;
    $this->セックス = $セックス;
    $this->headurl = $headurl;
  }
}
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(3)
仅有的幸福
  1. mysqlフィールドがutf8mb4-utf8mb4-general_ci

  2. に設定されました
  3. php

リーリー
いいねを押す +0
phpcn_u1582

テーブルが utf8mb4 をサポートしている場合は、utf8mb4 に変更してください。それが役に立たない場合は、utf32 を使用してください。

クエリを実行する前に、$conn->query("set names utf8") を実行して、データ送信プロセスが文字化けしていないことを確認します

絵文字も文字なので、jsonに変換する必要はありません

いいねを押す +0
我想大声告诉你

utf-8 はストレージに 3 バイトを使用しますが、絵文字文字は 4 バイトなので、utf-8 を utf8mb4 に変換すると解決します

また注意: mysql バージョンは v5.5.3 以降である必要があります

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート