如何使用startAT在Firebase REST查询中使用url编码字符串

如何使用startAT在Firebase REST查询中使用url编码字符串,rest,firebase,Rest,Firebase,在我们的数据库中,我们有用作FireBase密钥的URL。 这些键是url编码的字符串,格式如下: http%3A%2F%2Fblog%ZZexample%ZZcom%2F_Test_Blog_2015_06 GET请求返回空的: curl 'https://mydb.firebaseio.com/publishers/0000014d45a67fa3_4e93b3f/sites/0000014d45b0dc08_20173d1/pages.json?auth=authstringredact

在我们的数据库中,我们有用作FireBase密钥的URL。
这些键是url编码的字符串,格式如下:

http%3A%2F%2Fblog%ZZexample%ZZcom%2F_Test_Blog_2015_06
GET请求返回空的:

curl 'https://mydb.firebaseio.com/publishers/0000014d45a67fa3_4e93b3f/sites/0000014d45b0dc08_20173d1/pages.json?auth=authstringredacted;startAt="http%3A";orderBy="$key";limitToLast=1'
而这将返回一个项(请注意“startat”参数的差异):

起初我认为这可能是由于查询参数的url编码,但使用这些参数也不起作用:

startAt="http%253A"

startAt="http:";orderBy="$key";limitToLast=1'
我有一个http请求客户端,因此它不会对查询参数进行编码,而且也不起作用

我知道在REST接口上依赖非url编码的查询字符串看起来很奇怪,但Firebase依赖于有效JSON的查询arg值。请注意查询参数值周围的额外“”

是否有一种解决方法可以使查询正常工作


另一种选择是添加另一个表,该表将URL键映射到没有编码问题的唯一ID。

看起来您可以使用双百分比对百分比进行编码。但是您必须使用URL对它们进行编码,因此您不必使用
%%
来代替每个
%%
,而是使用
%25%25

因此,在您的示例中,此URL应该起到以下作用:

https://mydb.firebaseio.com/publishers/0000014d45a67fa3_4e93b3f/sites/0000014d45b0dc08_20173d1/pages.json?auth=authstringredacted;startAt=“http%25%253A%25%252F%25%252Fblog%25%25ZZexample%25%25ZZcom%25%252F_测试_博客_2015_06”;orderBy=“$key”;limitToLast=1

双重编码有效,谢谢Nathan!我在系统中输入了urlencod值,并再次对其进行编码以提取相关的Firebase注释。我让用户滥用了一个系统,他们最终发现这个系统不起作用,这个系统运行得很好。
startAt="http%253A"

startAt="http:";orderBy="$key";limitToLast=1'