タイトルに示されているように、現在、取得された文字列が Unicode エンコードに変換され、テーブルに格納されることが確認されています。現在発生している問題は、json_encode() 関数の場合です。は複数回エスケープして保存するために使用されます。データベース内の文字列には二重引用符が複数層あります。一度だけエスケープしてデータベースに保存すると、以下に示すように、引用符はありませんが、記号が欠落します。その後にキーコードが続きます。初心者は正しい保存方法を確認できます。 p>
< /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;
}
}
mysqlフィールドが
utf8mb4
-utf8mb4-general_ci
php
テーブルが utf8mb4 をサポートしている場合は、utf8mb4 に変更してください。それが役に立たない場合は、utf32 を使用してください。
クエリを実行する前に、$conn->query("set names utf8") を実行して、データ送信プロセスが文字化けしていないことを確認しますutf-8 はストレージに 3 バイトを使用しますが、絵文字文字は 4 バイトなので、utf-8 を utf8mb4 に変換すると解決します
また注意: mysql バージョンは v5.5.3 以降である必要があります