前后端数据交互中的特殊字符

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中设置的编码,再以字节流的形式传输并插入数据库。

前后端数据交互

过程:

  1. 在html页面要链接到js页面,要有个这样的东西

  2. 在js页面要定义controller层的url地址

  3. 分为获取数据和提交数据(js页面)

    • 获取数据,通过$.getJSON获取

      $.getJSON(shopInFourl,function(data))

      data是转化为json格式的字符串

    • 提交数据(通过$.ajax)

    • 后台获取数据,获取json格式的字符串

    • 将JSON格式的字符串,转为原来的格式

json数据的解码和编码

转为json格式:使用php内置的函数:json_encode

对字符串解码:json_decode


以上是关于前后端数据交互中的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

前后端交互

Flask与axios 前后端交互

网站开发过程中,前后端是如何进行交互的?

前后端交互(小白教学)

content-type常见类型辨析(以ajax与springmvc前后端交互为例)

web前端和后端怎么进行数据交互?