URL查询参数子分隔符处理

时间:2015-10-15 17:42:24

标签: node.js parsing url

我正在尝试处理url字符串 http://localhost:8000/lastnames/location/city/215722?filter=beginswith:p&paging=(offset:2,limit:2)

如何处理解析这些子对象? (offset:2,limit:2)只是作为字符串解析出来。这些是URL规范中接受的分隔符,所以我认为url.parse(在节点中)会处理这个问题。

1 个答案:

答案 0 :(得分:1)

“URL规范”(实际上,"Uniform Resource Identifier (URI): Generic Syntax, RFC-3986"定义了query组件的语法:

query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"

换句话说,sub-delims(包括括号)和冒号实际上只是查询中的普通字符。

如果请求(通过将true作为第二个参数传递),url.parse也会使用子请求=&将查询拆分为键值分配,根据application / x-www-form-urlencoded格式。其他子delim不参与查询字符串编码。

请注意,url.parse不会解码pct编码的序列,例如%25;为此,您需要decodeURIComponent。只有在将组件完全分解为它们的部件之后,才应该这样做。

简而言之,如果你想将(offset:2,limit:2)解析为其他结构化对象,你需要自己做,可能是通过使用正则表达式,或者 - 如果格式足够复杂 - 像这样的解析器生成器jison。无论如何,你应该将百分比解码步骤留到最后;否则,将无法正确解析百分比编码的子删除。