使用Post提交时须将空格转换成加号的解释

jQuery的serialize模块中有个r20正则


代码如下:

var r20 = /%20/g,

jQuery.param方法中会将所有的"%20"转成"+",即提交数据前,数据中如果包含空格,那经过encodeURIComponent后,空格会转成"%20"


代码如下:

encodeURIComponent(' ') === '%20'; // true

最后需要将"%20"转换成"="再Post提交。这样后台程序接受到的才是真正的空格。

关于 encodeURIComponent,见MDC描述

encodeURIComponent escapes all characters except the following: alphabetic, decimal digits, - _ . ! ~ * ' ( )

To avoid unexpected requests to the server, you should call encodeURIComponent on any user-entered parameters that will be passed as part of a URI. For example, a user could type "Thyme &time=again" for a variable comment. Not using encodeURIComponent on this variable will give comment=Thyme%20&time=again. Note that the ampersand and the equal sign mark a new key and value pair. So instead of having a POST comment key equal to "Thyme &time=again", you have two POST keys, one equal to "Thyme " and another (time) equal to again.

For application/x-www-form-urlencoded (POST), per http://www.w3.org/TR/html401/interac...m-content-type, spaces are to be replaced by '+', so one may wish to follow a encodeURIComponent replacement with an additional replacement of "%20" with "+".

相关
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent
http://www.w3.org/TR/html401/interact/forms.html#form-content-type

(0)

相关推荐

  • 浅谈在js传递参数中含加号(+)的处理方式

    一般情况下,URL 中的参数应使用 url 编码规则,即把参数字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+). 但是对于带有中文的参数来说,这种编码会使编码后的字符串变得很长. 如果希望有短一点的方式对参数编码,可以采用 base64 编码方式对字符串进行编码,但是 base64 编码方式不能处理 JavaScript 中的中文,因为 JavaScript 中的中文都是以 UTF-16 方式保存的. 而 base64 只能处理单字

  • URL的参数中有加号传值变为空格的问题(URL特殊字符)

    1.URL特殊字符需转义 2.空格换成加号(+)   3.正斜杠(/)分隔目录和子目录   4.问号(?)分隔URL和查询   5.百分号(%)制定特殊字符   6.#号指定书签   7.&号分隔参数 转义字符的原因: 如果你的表单使用get方法提交,并且提交的参数中有"&"等特殊符的话,如果不做处理,在service端就会将&后面的作为另外一个参数来看待.例如 表单的action为list.jsf?act=Go&state=5 则提交时通过reques

  • 完美解决js传递参数中加号和&号自动改变的方法

    在action中用get方法获得参数,如果参数里有"+",要做处理,否则到后台会变成空格. 解决方案: 1 .改用post方法: 2 .在 js 里用 url = encodeURI(encodeURI(XXX)) ,后台再解码一次: 3 .传递参数的时候直接替换转义,或者直接写转义后的代码 data =  "a + b": data = data.replace(/\+/g, "+"); data = data.replace(/\&/

  • 解决js数据包含加号+通过ajax传到后台时出现连接错误

    昨天有人提出一个bug,说"B+侦探"和"C+侦探"不能看,我当时很郁闷,因为其他资源是可以播放的,为什么这个不能播放,而且电影名称我都是字符转换过的,在不断调试中,发现url地址电影名字转码后存在一个"+",心想是不是这个问题,删除"+",链接畅通了,果然是这块问题,对加号进行转义. 关于特殊字符的转义,网上很多,我写这个主要是帮大家排查问题提供一点思想

  • 使用Post提交时须将空格转换成加号的解释

    jQuery的serialize模块中有个r20正则 复制代码 代码如下: var r20 = /%20/g, jQuery.param方法中会将所有的"%20"转成"+",即提交数据前,数据中如果包含空格,那经过encodeURIComponent后,空格会转成"%20" 复制代码 代码如下: encodeURIComponent(' ') === '%20'; // true 最后需要将"%20"转换成"=&qu

  • JavaScript将base64图片转换成formData并通过AJAX提交的实现方法

    之前为了拍摄照片使用了webcam相关的插件,其拍摄后得到的是base64格式的图片,直接显示没问题,在src中直接指定就可以了,但是要上传到server时问题就来了,server端接收的是标准的文件,也就是html form中type="file"的形式.想要沿用这个接口不更改server端代码,于是尝试将base64直接转换成标准的fomeData并通过AJAX提交. 第一步,将base64转换成二进制图片(Blob) 主要思路是整理一下base64的前面几个字符,预处理以后转换成

  • PHP实现表单提交时去除斜杠的方法

    本文实例讲述了PHP实现表单提交时去除斜杠的方法.分享给大家供大家参考,具体如下: <html> <head> <title>HTML 表单</title> </head> <body> <form action="" method="POST"> 请输入一个字符串: <input type="text" size="30" name=&

  • python将时分秒转换成秒的实例

    处理数据的时候遇到一个问题,从数据库里导出的数据是时分秒的格式:hh:mm:ss ,现在我需要把它转换成秒,方便计算. 原数据可能分两种情况,字段有可能是文本字符串类型的,也有可能是时间类型,他们的处理方法不一样,所以我们分开讨论. 1.字符串类型转换成秒 可以将其用 ':' 分隔开,分别得出时.分.秒,即可计算出秒数.所以我们定义如下函数: def str2sec(x): ''' 字符串时分秒转换成秒 ''' h, m, s = x.strip().split(':') #.split()函数

  • 解决idea中svn提交时performing vcs refresh时间很长的问题

    出现场景:idea软件重装了一次,项目空间是沿用原来的,所有的项目配置也是之前的,导致svn提交异常缓慢. 1.解决方案:重新建立工作区间project 将svnd的项目导出来,并且配置好项目运行环境 再次提交代码到svn就不卡了 2.将设置的值设为300 3.设置一下这里 重启idea,再次提交到svn 亲测有效!!!! 补充知识:idea使用svn(日常使用) 本文记录了svn的日常使用!!!非常详细!!!持续更新- 更新svn的项目到本地(一般是先更新再进行提交) 选择你的svn(服务器)

  • Angularjs 双向绑定时字符串的转换成数字类型的问题

    问题: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myAp

  • CheckBox控件默认选中,提交时永远获得选中状态的实现代码

    写个项目,从数据库中获得的数据绑定值Checkbox,绑定方法如下 //加班设置数据绑定 protected void CheckBoxBind() { OverTimeBLL overTimeBll = new OverTimeBLL(); List<OverTime> overTimeList = new List<OverTime>(); overTimeList = overTimeBll.GetAll(); if (overTimeList.Count > 0) {

  • JavaScript判断表单提交时哪个radio按钮被选中的方法

    本文实例讲述了JavaScript判断表单提交时哪个radio按钮被选中的方法.分享给大家供大家参考.具体分析如下: 这里的表单提交时通过JavaScript判断哪个radio按钮被选中了 <script type="text/javascript"> function findButton() { var myForm = document.forms.animalForm; var i; for(i=0;i<myForm.marsupial.length; i++

  • 表单提交时自动复制内容到剪贴板的js代码

    <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>交时自动复制到剪贴板</title> </head> <script language="JavaScript"> /*功能:提交时自动复制到剪贴板 */ function copyTe

  • IE浏览器在post提交时中文乱码的解决方法

    现在遇到的问题是在页面和服务器端都配置了字符编码uft-8,但是在提交时火狐,chrome都没有问题,ie8确出现了中文乱码,采用的解决方法是在网页端转码,在服务器端再转回来,实例: 客户端: 复制代码 代码如下: userName = encodeURI(userName); post提交后 服务器端: 复制代码 代码如下: response.serContentType("text/html;charset=utf-8"); String keyword= request.getP

随机推荐