url 中有空格, encode 了之后,服务端只能拿到第一个空格前面的内容,求助?

2016-08-31 10:18:32 +08:00
 Powered
请求的参数有空格,如:/?title=aaa bbb ccc
编码或者不编码,服务端拿到的 title 都是 aaa
3528 次点击
所在节点    程序员
24 条回复
alanjin
2016-08-31 10:23:07 +08:00
为什么 url 里面要放空格?
Olive
2016-08-31 10:24:11 +08:00
空格转成下滑线
SharkIng
2016-08-31 10:25:12 +08:00
URL 里面还能有空格?长见识了
Powered
2016-08-31 10:25:41 +08:00
@alanjin 因为字段的值包含空格
isCyan
2016-08-31 10:26:10 +08:00
@SharkIng 谷歌百度搜索一个带空格的关键词 URL 里就有空格啊。
SharkIng
2016-08-31 10:26:21 +08:00
@SharkIng 有空格的例如 LZ 举例的标题都可以转成 %20 这样吧??
Powered
2016-08-31 10:27:11 +08:00
@SharkIng
没说清楚,空格在 url 中被转为了%20
然而服务端还是拿不到完整值
lovedebug
2016-08-31 10:27:30 +08:00
还是 JSON 大法好。很好奇服务器难道以空格分割?不是=号分割吗?
Pastsong
2016-08-31 10:27:50 +08:00
url encode 之后空格不都是 %20 这样吗
lovedebug
2016-08-31 10:27:57 +08:00
可以考虑先 escape 再 encode
ljbha007
2016-08-31 10:28:40 +08:00
出现这种情况其实是因为有些隐藏的逻辑错误、函数使用错误 楼主未给出完整信息无法解答
Powered
2016-08-31 10:28:59 +08:00
@lovedebug
Json 当然好了,不过用在 post
对啊,等号分割,然而现在像空格分割
SourceMan
2016-08-31 10:29:03 +08:00


虽然是 JavaScript 写的,但是道理是一样的
lovedebug
2016-08-31 10:33:16 +08:00
@Powered 之前碰到的
1. 请求字段超长被截断
2. 后端解析有问题或者按空格分割或者被后端多次处理,建议 debug 看看
3. url 被其他函数过滤或者处理过才传给后端的,建议查一下
Powered
2016-08-31 10:40:19 +08:00
先谢谢楼上各位

我的 URL 大概长这样: http://localhost:3000/?title=aaa%20bbb%20ccc

使用 encodeURIComponent 和 decodeURIComponent 当然可以得到正确的值

然而问题是...我使用了封装的对象

(Koa2.0/es6)

```
let queryBody = ctx.request.query;

let title = queryBody.title;
```

得到的是第一个空格前面的值
gdtv
2016-08-31 10:44:52 +08:00
如果已经 encode 了服务器还是获取不到,那就是服务器端代码的问题 了
Powered
2016-08-31 10:47:06 +08:00
@gdtv 是服务端代码问题

主要问题是 ctx.request.query 这行代码
BoiledEgg
2016-08-31 11:27:30 +08:00
ctx.request.url ctx.request.querystring 应该能拿到的吧?
request.query 是 request.querystring 用 querystring 这个库解析出来的
request.querystring 是 request.url 用 parseurl 这个库解析出来的
一步步调看哪一步出问题了,应该% 20 代替空格就没问题了啊
yhxx
2016-08-31 11:29:36 +08:00
@isCyan
搜了一下“ 1 空格 2 ”
https://www.google.com/search?q=1+2
url 是这样的啊
qiayue
2016-08-31 11:40:01 +08:00
@yhxx 你这个是搜索引擎自己做的规则,自己替换的

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

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

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

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

© 2021 V2EX