首页 > 解决方案 > 可以在 url 中使用未编码的保留字符吗?

问题描述

我需要在查询字符串中添加多个嵌套路径。为此,我对各个路径名进行编码,并将它们与 /(分隔符)结合起来。如果路径中包含斜杠,它将被编码为 %2F..但是我们没有编码分隔符斜杠(用于分割路径)

示例

输入1:a->b->c 输入2:path_with_/_slash->d->e

输出:?q=a/b/c+path_with_%2F_slash/d/e

注意:我手动创建查询字符串(不使用 urlsearchparams,因为它编码所有斜线,包括分隔符)

可以在查询字符串中使用未编码的斜杠(用作分隔符)吗?这会在任何浏览器中产生任何问题吗?有没有更好的方法来处理这种情况?

标签: reactjsurlreact-routerencodeurlsearchparams

解决方案


如果您手动形成查询字符串,则必须遵循URL 标准第 5.2 节“application/x-www-form-urlencoded 序列化”中概述的过程:

  1. 让输出为空字符串。
  2. 对于每个元组的元组:
    1. 让 name 是使用编码、元组名称、application/x-www-form-urlencoded percent-encode 集和 true 编码后运行 percent-encode 的结果。
    2. 令 value 为使用 encoding 编码后运行 percent-encode 的结果、元组的值、application/x-www-form-urlencoded percent-encode 集和 true。
    3. 如果输出不是空字符串,则将 U+0026 (&) 附加到输出。
    4. 追加名称,后跟 U+003D (=),后跟值,以输出。
  3. 返回输出。

除非您手动滚动自己的服务器,否则任何功能/中间件/等。在路由处理期间使用 url 查询将自动为您解码这些值。


推荐阅读