来来来看看, url 中的 + 号问题

2015-05-08 10:52:46 +08:00
 whatisnew

一个日期 Fri, 11 May 2014 01:23:45 +0000 经 url 传递(get),然后,
就变成了 Fri, 11 May 2014 01:23:45 0000 注意 + 号没有了

这个好像是 w3c 的标准。。。大家是怎么解决的?

2116 次点击
所在节点    问与答
13 条回复
free9fw
2015-05-08 11:04:22 +08:00
urlencode
liuhaotian
2015-05-08 11:08:14 +08:00
+是空格被encode之后的结果,这时候你需要进行 urlencode 获取后进行 urldecode
jasonding
2015-05-08 11:20:03 +08:00
加号和空格的互转问题,你可以encode/decode三次来破解这个黑魔法。不过如果没有特殊原因的话,replace就够了
whatisnew
2015-05-08 11:21:53 +08:00
@liuhaotian 那上 + 号是字符串,不是 encode 之后的
lianyue
2015-05-08 11:23:24 +08:00
%20 变成
Septembers
2015-05-08 11:27:16 +08:00
使用encodeURIComponent
> encoded = encodeURIComponent('Fri, 11 May 2014 01:23:45 +0000')
< "Fri%2C%2011%20May%202014%2001%3A23%3A45%20%2B0000"
> decodeURIComponent(encoded)
< "Fri, 11 May 2014 01:23:45 +0000"
see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
see http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
see http://en.wikipedia.org/wiki/Percent-encoding#The_application.2Fx-www-form-urlencoded_type

Base64
> encoded = btoa('Fri, 11 May 2014 01:23:45 +0000')
< "RnJpLCAxMSBNYXkgMjAxNCAwMToyMzo0NSArMDAwMA=="
> atob(encoded)
< "Fri, 11 May 2014 01:23:45 +0000"

对于这种格式(GMT)的时间建议用Date预处理成ISO 8601
> new Date('Fri, 11 May 2014 01:23:45 +0000').toISOString()
< "2014-05-11T01:23:45.000Z"
ISO 8601格式相对问题少些
cpp255
2015-05-08 11:31:42 +08:00
HttpServer decode会把 + 转为空格,把"+" replace 为 “%2B”
MaiCong
2015-05-08 11:32:43 +08:00
http://www.w3school.com.cn/jsref/jsref_encodeURIComponent.asp
http://www.w3school.com.cn/jsref/jsref_decodeURIComponent.asp

var time = encodeURIComponent('Fri, 11 May 2014 01:23:45 +0000');

console.log(time + '\n' + decodeURIComponent(a));
liuhaotian
2015-05-08 11:36:27 +08:00
@whatisnew 我的意思是,这个+是空格encode的结果。因此已经被识别为空格了。
Septembers
2015-05-08 11:39:11 +08:00
@liuhaotian 我引用的规范里有说
msg7086
2015-05-08 11:54:45 +08:00
过url传递前必须先encode。
Anybfans
2015-05-08 13:22:07 +08:00
neilwong
2015-05-08 16:31:31 +08:00
我奇怪的是get传递参数为什么不是timestamp而是这么一串字符串~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/189403

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX