比如我的一个原始的请求的URL为:
http://192.168.1.150:3000/messenger?between=TxPhdW828e7GF63pw1/Uve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy+lqylVx9+wvikw=
但是到了express里面默认取到的between的值就为:
TxPhdW828e7GF63pw1/Uve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy lqylVx9 wvikw=
这就刚好是将+号给替换成了空格啊。 如何设置能够让express获取到的QueryString就是原始的QueryString呢?
用encodeURIComponent编码再传过来试试
console.log(encodeURIComponent(‘TxPhdW828e7GF63pw1/Uve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy+lqylVx9+wvikw=’));
TxPhdW828e7GF63pw1%2FUve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy%2BlqylVx9%2Bwvikw%3D
…
console.log(unescape(‘TxPhdW828e7GF63pw1%2FUve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy%2BlqylVx9%2Bwvikw%3D’));
TxPhdW828e7GF63pw1/Uve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy+lqylVx9+wvikw=
请求过来的URL是你自己弄的还是别人传过来的? 你可以改变请求过来的参数吗? 一般来说,都是请求过来的url自己需要做好url encode的。 一个url请求,自己不做url encode那肯定是不对的。
@zdwen 恩,我的意思就是,别人提交过来的就是错的。别人提交的应该是:http://192.168.1.150:3000/messenger?between=TxPhdW828e7GF63pw1%2FUve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy%2BlqylVx9%2Bwvikw%3D
也就是说,最正确的解决方案,应该是叫别人提交过来的参数做一下url encode。 然后你这边取到的就是+号了。 但是如果你无法改变别人传过来的东西。那只能很丑陋地自己再转化过去了。我不知道怎么转换。。。抱歉。。。