제목과 같이 현재 획득한 문자열이 유니코드 인코딩으로 변환되어 테이블에 저장되는 것으로 확인되었습니다. 현재 직면한 문제는 다음과 같습니다. 여러 번 이스케이프한 후 저장하는 데 사용됩니다. 데이터베이스의 문자열에는 여러 겹의 큰따옴표가 있습니다. 한 번만 이스케이프하여 데이터베이스에 저장하면 따옴표가 없더라도 아래와 같이 기호가 누락됩니다. 이어서 키코드를 입력하시면 올바른 보관방법을 상담하실 수 있습니다. p>
< /p>
키 코드:
함수 weixininfo($code){
$userinfo = getJson($get_user_info_url);
$wxif = new wxinfo($userinfo["openid"],$userinfo["닉네임"],$userinfo["sex"],$userinfo["headimgurl"]);
클래스 Emp {};
$obj = 새로운 Emp();
$obj->결과 = 0;
$obj->info = $wxif;
$obj를 반환합니다.
}
$code = $_GET['코드'];
$data = weixininfo($code);
$info = $data->정보;
$openid = $info->openid;
$nickname = $정보->닉네임;
$name = json_encode($닉네임);
$sex = $정보->섹스;
$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";
// 헤더( "위치: $uri" );
}또 다른{
echo "실패:".$sqls."<br>".$conn->error;
};
함수 getJson($url){
$ch = 컬_초기화();
컬_setopt($ch, CURLOPT_URL, $url);
컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
컬_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = 컬_exec($ch);
컬_닫기($ch);
return json_decode($output, true);
}
클래스 wxinfo {
공개 $openid;
공개 $닉네임;
공개 $섹스;
공개 $headurl;
공개 함수 __construct($openid,$nickname,$sex,$headurl){
$this->openid = $openid;
$this->닉네임 = $닉네임;
$this->sex = $sex;
$this->headurl = $headurl;
}
}
mysql 필드가
utf8mb4
-utf8mb4-general_ci
php
테이블이 utf8mb4를 지원하는 경우 utf8mb4로 변경하세요. 유용하지 않으면 utf32를 사용하세요. 소수의 이모티콘 표현만 지원됩니다
쿼리하기 전에 $conn->query("set names utf8")를 실행하여 데이터 전송 프로세스가 왜곡되지 않았는지 확인하세요
emoji도 문자이므로 json으로 변환할 필요가 없습니다
utf-8은 저장 공간으로 3바이트를 사용하고 이모티콘 문자는 4바이트를 사용하므로 utf-8을 utf8mb4로 변환하면 문제가 해결됩니다
참고: mysql 버전은 v5.5.3 이상이어야 합니다