1.json数据的解码和编码
在不同的语言下,有不同的解码和编码方法。我们现在看看php下如何对json数据编码和解码的。
<?php
$json_data = array(
'date' => '2020.01.18',
'city' => 'Yantai',
'weather' => 'sunny'
);
?>
在php中,对一个对象json编码,可以使用php内置的函数:json_encode
对上面的数组进行json编码后,我们得到一个字符串
{"date":"2020.01.18","city":"Yantai","weather":"sunny"}
同样的,我们对上面这个字符串json解码,使用php内置函数json_decode
就可以得到这个字符串对应的对象
另:json_decode
函数有第二个参数。json_decode($array,true)
当第二个参数为true时返回数组,默认值为false 返回对象。
2.数据在前后端传输过程中的转化情况
因为浏览器的编码规则和服务器的解码规则不一样,有可能会导致前端传给后端“一串乱码”。所以我们为了防止这种情况的发生,通常先会将数据转变为json格式,然后告诉浏览器我们要使用哪种方法进行编码。
前后端交互过程中涉及的编码
Browser cilent: 首先,浏览器的设置里有设置编码格式,一般设置为UTF-8。
AJAX request: AJAX异步请求的过程中可以设置编码,
contentType:"application/x-www-form-urlencoded; charset=utf-8"
PHP cilent: PHP通过
$_POST
这个全局变量接收前端POST过来的数据,编码格式为AJAX在请求头中设置的charset=utf-8
,PHP操作的过程中可以通过iconv
函数库自行转码,例如iconv("UTF-8","GB2312//IGNORE",$data)
connection: 在PHP与数据库连接的过程中可以设置
connection
过程中使用的编码格式,例如CodeIgniter框架可以在数据库配置文件database.php中,设置'char_set' => 'latin1'
databases: 数据会先把数据从php客户端的编码转为转为
connection
中设置的编码,再以字节流的形式传输并插入数据库。
常见的字符编码方式
-
UTF-8 万国码
-
latin1 又称“西欧语言”,是mysql数据库默认设置。为单字节编码
-
-
GBK 汉字内码扩展规范,支持繁体与简体和许多符号
参考资料