前后端数据交互中的特殊字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前后端数据交互中的特殊字符相关的知识,希望对你有一定的参考价值。
参考技术A 背景:最近发生了一起生产事故,原因是前端将null传给了后端,后端接收到的数据是字符串“null”,在处理数据的时候报错;原因:前后端经过讨论大概的猜测原因有以下几种
1. Java无法正确转化前端传给的特殊值null,故强制转化成字符串"null"(网上不少博客也支持这种说法);
2. 在前后端数据交互中,数据在传输中转化成字符串,故null被错误转化成字符串“null”;
个人疑问:根据项目经验,前端是可以区分后端传给前端的null和字符串“null”(仅仅是感觉),为什么后端不能区分前端传给后端的null和字符串“null”呢?
问题的探索结果:1. Java后端是可以接收前端传给后端的特殊值null,并且会自动的转化成Java的null,不会转化成字符串"null";
2. 前后端数据交互中,null在传输中不会转化成字符串“null”;
3.
前后端交互
json:
json的特点是结构清晰、易拓展,所以经常用来作为前后端交互的格式(也有的用xml格式)。而前端有原生方法将json字符串方便地转换为前端可用数据结构,所以你很有必要在后端把集合转为json字符串再传递。
json格式在前端中跟js的对象/数组数据结构长得一模一样,除了数据类型不同以外。所以前端喜欢称json为json对象。
json数据格式: (json键/值对)
{
“姓名”:”流年”
“性别”:”男”
“兴趣爱好”:”听音乐”
}
常见的几种编码方式
常见的一些字符编码方式无非有:Unicode、ASCII、GBK、GB2312、UTF-8。
ASCII编码:用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符。
拓展ASCII编码:用于表示更多的欧洲文字,用8个位存储数据,一共可以表示256个字符
GBK/GB2312/GB18030:表示汉字。GBK/GB2312表示简体中文,GB18030表示繁体中文。
Unicode编码:包含世界上所有的字符,是一个字符集。
UTF-8:是Unicode字符的实现方式之一,它使用1-4个字符表示一个符号,根据不同的符号而变化字节长度。
后端编程过程涉及到的编码转换过程
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中设置的编码,再以字节流的形式传输并插入数据库。
前后端数据交互
过程:
在html页面要链接到js页面,要有个这样的东西
在js页面要定义controller层的url地址
分为获取数据和提交数据(js页面)
获取数据,通过$.getJSON获取
$.getJSON(shopInFourl,function(data))
data是转化为json格式的字符串
提交数据(通过$.ajax)
后台获取数据,获取json格式的字符串
将JSON格式的字符串,转为原来的格式
json数据的解码和编码
转为json格式:使用php内置的函数:json_encode
对字符串解码:json_decode
以上是关于前后端数据交互中的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章