【问题标题】:Query Params include #, Javascript (Node) errors out查询参数包括#, Javascript (Node) 错误输出
【发布时间】:2020-07-29 04:10:49
【问题描述】:

为了简单起见,我正在使用 Firebase Cloud Functions,当/如果我收到包含 # 的参数时,它无法识别它。

例如:http://example.net?id=123#456。如果我登录id,我只会得到 123。

但是,如果我执行http://example.net?id=123456 之类的操作,所有内容都会被记录。

如何在id 的字符串值中包含# 符号?

更好的细节:

网址:http://example.com?item=2019+#157&typeOfListing=sold

如果我对请求查询进行编码

let item = encodeURIComponent(req.query.item);

我会得到以下:

2019%20

它没有带上#。

【问题讨论】:

  • 这是 url 哈希的一部分。你必须对其进行编码。您能否准确提供输入和输出以及代码的工作原理以获取详细信息?
  • @DanielA.White 更新

标签: javascript node.js


【解决方案1】:

这是因为 # 是 url 中的一个特殊字符(就像 /:?、... 一样),它用于表示 url 的 fragment 部分。你需要像这样使用encodeURIComponent 转义它:

let idParam = encodeURIComponent("123#456");
let url = "http://example.net?id=" + idParam;

【讨论】:

  • 这不包括#号。
  • @soldfor 你在服务器端吗?查询参数需要在生成请求的一侧进行编码。
  • 所以如果它来自应用程序(android、ios),则需要在客户端进行编码。
  • @soldfor 完全正确。哈希通常不会发送到服务器
  • @soldfor 是,否则 it is never sent to server。发送请求的应用程序应在发出请求之前对 url 中的所有特殊字符进行编码
猜你喜欢
  • 2019-10-23
  • 2015-08-29
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2021-08-05
  • 2017-07-30
  • 2022-01-09
相关资源
最近更新 更多