php调用微信用户信息接口昵称里面的emoji表情怎么存储到mysql中?
天蓬老师
天蓬老师 2017-05-16 13:06:54
0
3
882

如题:目前确定是将获取到的字符串转为unicode编码存储到表中,表的编码是utf-8;现在遇到的问题是:如果使用json_encode()函数多次转义后存储到数据库中的字符串多了好几层的双引号,如果只转义一次存储到数据库中虽然没有了引号,但是 符号不见了,如下图,后面附关键代码,新手咨询存储的正确方式;

看到回答都是需要将数据库字符集改为:utf8mb4,想知道不用这个字符集用utf-8不可以吗?新手只知道在my.ini修改全局的字符集,不知道怎么针对这个字段来修改啊。

最新更新:经过测试虽然utf8mb4能够将数据存储到数据库中,但是还是有问题的:如果微信昵称前后面都有表情,中间有文字的时候,数据库中只能将前面的表情保存,后面的表情变成了空格,经过几番周折还是使用了utf8来保存下图蓝色条选中的那样字符串来保存,在前端对字符串进行去"处理,保证用户的昵称不被破坏,如果各位有更好的办法欢迎留言。

关键代码:

function weixininfo($code){ $userinfo = getJson($get_user_info_url); $wxif = new wxinfo($userinfo["openid"],$userinfo["nickname"],$userinfo["sex"],$userinfo["headimgurl"]); class Emp {}; $obj = new Emp(); $obj->result = 0; $obj->info = $wxif; return $obj; } $code = $_GET['code']; $data = weixininfo($code); $info = $data->info; $openid = $info->openid; $nickname = $info->nickname; $name = json_encode($nickname); $sex = $info->sex; $headurl = $info->headurl; $sqls = "INSERT INTO mytest(openid,nickname,sex,headurl) VALUES ('$openid',$name,'$sex','$headurl')"; if($conn->query($sqls) === true){ session_start(); $_SESSION["openid"]=$openid; $conn->close(); // $uri ="./index.php"; // header( "Location: $uri" ); }else{ echo "失败:".$sqls."
".$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); curl_close($ch); return json_decode($output, true); } class wxinfo { public $openid; public $nickname; public $sex; public $headurl; public function __construct($openid,$nickname,$sex,$headurl){ $this->openid = $openid; $this->nickname = $nickname; $this->sex = $sex; $this->headurl = $headurl; } }
天蓬老师
天蓬老师

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

모든 응답 (3)
仅有的幸福
  1. mysql 필드가utf8mb4-utf8mb4-general_ci

  2. 로 설정됨
  3. php

으아악
    phpcn_u1582

    테이블이 utf8mb4를 지원하는 경우 utf8mb4로 변경하세요. 유용하지 않으면 utf32를 사용하세요. 소수의 이모티콘 표현만 지원됩니다

    쿼리하기 전에 $conn->query("set names utf8")를 실행하여 데이터 전송 프로세스가 왜곡되지 않았는지 확인하세요

    emoji도 문자이므로 json으로 변환할 필요가 없습니다

      我想大声告诉你

      utf-8은 저장 공간으로 3바이트를 사용하고 이모티콘 문자는 4바이트를 사용하므로 utf-8을 utf8mb4로 변환하면 문제가 해결됩니다

      참고: mysql 버전은 v5.5.3 이상이어야 합니다

        최신 다운로드
        더>
        웹 효과
        웹사이트 소스 코드
        웹사이트 자료
        프론트엔드 템플릿
        회사 소개 부인 성명 Sitemap
        PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!