菜单

浅谈在js传递参数中含加号,通过ajax传到后台时出现连接错误

2019年8月2日 - 前端排行

前几日有人提出二个bug,说“B+侦探”和”C+侦探”不可能看,笔者霎时很窝囊,因为任何能源是足以播放的,为啥这一个无法播放,并且电影名称小编都以字符调换过的,在不停调节和测验中,发掘url地址电影名字转码后存在一个“+”,心想是否这几个标题,删除“+”,链接畅通了,果然是那块难题,对加号实行转义。

1.UPAJEROL独特字符需转义
2.空格换到加号(+)  
3.正斜杠(/)分隔目录和子目录  
4.问号(?)分隔URL和查询  
5.百分号(%)拟订特殊字符  
6.#号钦点书签  
7.&号分隔参数  

貌似境况下,UQX56L 中的参数应使用 url 编码准绳,即把参数字符串中除了 -_.
之外的保有非字母数字字符都将被沟通来都百货分号(%)后跟两位十六进制数,空格则编码为加号(+)。

关于特殊字符的转义,网络海人民广播广播台大,作者写那几个重视是帮大家排查难点提供一些观念

转义字符的因由:

不过对于富含中文的参数来讲,这种编码会使编码后的字符串变得相当长。

您恐怕感兴趣的稿子:

一旦您的表单使用get方法提交,况且付诸的参数中有“&”等极度符的话,假若不做管理,在service端就能够将&前面包车型客车作为别的一个参数来对待。比方
表单的action为list.jsf?act=Go&state=5
则交由时经过request.getParameter能够独家赢得act和state的值。
假定您的本意是act=’go&state=5’那些字符串,那么为了在服务端获得act的准确值,你无法不对&进行转义

一旦指望有短一点的方法对参数编码,能够利用 base64
编码方式对字符串实行编码,但是 base64 编码格局不能够管理 JavaScript
中的中文,因为 JavaScript 中的中文都是以 UTF-16 情势保留的。

url转义字符原理:

而 base64 只可以管理单字节字符,所以无法一贯用 base64 对含蓄粤语的
JavaScript 字符串实行编码。

将这么些特种的字符转变到ASCII码,格式为:%加字符的ASCII码,即二个百分号%,前面跟对应字符的ASCII(16进制)码值。举个例子空格的编码值是”%20″。
 
1.URubiconL特殊符号及相应的十六进制值编码:  

不过可以通过 utf.js 这一个顺序中提供的 utf16to8 来将 UTF-16
编码的国语先转化为 UTF-8 格局,然后再打开 base64 编码。

  1. 3.+  UCR-VL 中+号表示空格 %2B  
    4.空格 U凯雷德L中的空格能够用+号或许编码 %20  
    5./ 相间目录和子目录 %2F   
    6.? 分隔实际的 U福睿斯L 和参数 %3F   
    7.% 钦定极其字符 %25   
    8.# 表示书签 %23   
    9.& URubiconL 中钦点的参数间的相间符 %26   
    10.= U帕杰罗L 中钦赐参数的值 %3D 

那样编码后的字符串,在传递到服务器端后得以直接通过 base64_decode 解码成
UTF-8 的普通话字符串。

消除措施如下(以+号为例):

只是还也是有个难题供给留神。

方法一、修改客户端,将客户端带“+”的参数中的“+”全体交替为?“%2B”,那样参数字传送到服务器端时就能够收获“+”了。
办法二、修改服务器端,将空格替换为“+”,这种方法只适用于参数中有?“+”未有空格的情状。

base64 编码中利用了加号(+),而 + 在 UXC90L
传递时会被当成空格,由此必供给将 base64 编码后的字符串中的加号替换成 %2B
能力作为 U奥德赛L 参数实行传递。

例子:

不然在劳务器端解码后就能够出错。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图