编码 - 我用PHP从mysql取出数据然后转Json,但是为什么中文显示的是问号?
程序员文章站
2022-05-23 21:14:43
...
上面的是我数据库存的数据,采用的utf8_bin编码,开始的时候用的是utf8_unicode_ci,可是还是不行
下面是我的PHP代码
id = $row["id"];
$user -> name = $row["name"];
$user -> address = $row["address"];
$user -> phonenumber = $row["phonenumber"];
$data[] = $user;
}
if (function_exists('mysql_set_charset') === false) {
mysql_query("SET NAMES UTF8",$data);
}else{
mysql_set_charset('utf8',$data);
}
$response = array(
'code' => 200,
'message' => 'success for request',
'data' => $data,
);
echo urldecode(json_encode($response));
mysql_free_result($response); //释放
mysql_close();//关闭数据库
?>
最后在浏览器显示的是这个尿性
{
"code": 200,
"message": "success for request",
"data": [
{
"id": "100",
"name": "??",
"address": "????",
"phonenumber": "13212340001"
},
{
"id": "101",
"name": "??",
"address": "????",
"phonenumber": "13512340002"
},
{
"id": "100",
"name": "??",
"address": "????",
"phonenumber": "13212340001"
},
{
"id": "101",
"name": "??",
"address": "????",
"phonenumber": "13512340002"
},
{
"id": "0",
"name": "",
"address": "",
"phonenumber": "0"
},
{
"id": "103",
"name": "??",
"address": "????",
"phonenumber": "13512340005"
},
{
"id": "103",
"name": "??",
"address": "????",
"phonenumber": "13512340005"
}
]
}
为什么中文显示的是问号呢?我要的Unicode编码的就好了
回复内容:
上面的是我数据库存的数据,采用的utf8_bin编码,开始的时候用的是utf8_unicode_ci,可是还是不行
下面是我的PHP代码
id = $row["id"];
$user -> name = $row["name"];
$user -> address = $row["address"];
$user -> phonenumber = $row["phonenumber"];
$data[] = $user;
}
if (function_exists('mysql_set_charset') === false) {
mysql_query("SET NAMES UTF8",$data);
}else{
mysql_set_charset('utf8',$data);
}
$response = array(
'code' => 200,
'message' => 'success for request',
'data' => $data,
);
echo urldecode(json_encode($response));
mysql_free_result($response); //释放
mysql_close();//关闭数据库
?>
最后在浏览器显示的是这个尿性
{
"code": 200,
"message": "success for request",
"data": [
{
"id": "100",
"name": "??",
"address": "????",
"phonenumber": "13212340001"
},
{
"id": "101",
"name": "??",
"address": "????",
"phonenumber": "13512340002"
},
{
"id": "100",
"name": "??",
"address": "????",
"phonenumber": "13212340001"
},
{
"id": "101",
"name": "??",
"address": "????",
"phonenumber": "13512340002"
},
{
"id": "0",
"name": "",
"address": "",
"phonenumber": "0"
},
{
"id": "103",
"name": "??",
"address": "????",
"phonenumber": "13512340005"
},
{
"id": "103",
"name": "??",
"address": "????",
"phonenumber": "13512340005"
}
]
}
为什么中文显示的是问号呢?我要的Unicode编码的就好了
if (function_exists('mysql_set_charset') === false) {
mysql_query("SET NAMES UTF8",$data);
}else{
mysql_set_charset('utf8',$data);
}
这一段应该放在mysql_query
之前,另外这两个地方的第二个参数也不应该是$data
,而应该是$connect
我之前也遇到过这个问题,加了个这个后就好了mysqli_query($conn,"SET NAMES utf8");
class DBHelper{
public function DBHelper(){}
private static function getConn(){
$conn = mysqli_connect(DB_HOST,DB_USER,DB_PWD,DB_NAME);
mysqli_query($conn,"SET NAMES utf8");
return $conn;
}
public static function opearting($sql){
return mysqli_query(self::getConn(),$sql);
}
}
中文的urlencode 这个编码问题,我遇到的,不能直接进行解码。不然会出现乱码的。我使用的方式是。
单独编码。然后在解码,` /**
* [ReturnUrlencode 用递归的方式来遍历所有的数组并且解析]
* @param [type] $arr [description]
*/
function ReturnUrlencode($arr){
foreach ($arr as $key => $value){
if(is_array($value)){
$arr[$key]=ReturnUrlencode($value);
}else{
$arr[$key]=urlencode($value);
}
}
return $arr;
}`
##这种方式,输出来的json 中文就不会乱码了。
urldecode(json_encode(ReturnUrlencode($arr)));
if (function_exists('mysql_set_charset') === false) {
mysql_query("SET NAMES UTF8",$data);
}else{
mysql_set_charset('utf8',$data);
}
这一句应该放在遍历数据之前吧
上一篇: 【php】三、学生管理系统-查看用户
下一篇: 请问关于pdo的prepare用法