在url变量中斜杠

nam*_*tax 95 url escaping

我已经将我的coldfusion应用程序设置为在页面上有动态URL,例如

www.musicExplained/index.cfm/artist/:VariableName
Run Code Online (Sandbox Code Playgroud)

但是我的变量名有时会包含斜杠,例如

www.musicExplained/index.cfm/artist/GZA/Genius
Run Code Online (Sandbox Code Playgroud)

这导致了一个问题,因为我的应用程序假定变量名中的斜杠代表网站的不同部分,即艺术家专辑.因此URL将失败.

我想知道是否有任何方法可以防止这种情况发生?我是否需要使用一个函数来将变量名中的斜杠替换为另一个字符?

SLa*_*aks 154

你需要逃避斜杠%2F.

  • IIS仍然以"/"来拦截它并打破路径.:( (34认同)
  • Apache将此解释为/并中断路由,除非启用AllowEncodedSlashes指令(默认情况下已关闭) (20认同)
  • 为此,您可以使用`encodeURIComponent`和`decodeURIComponent`. (4认同)
  • 这是标准的 URL 编码。 (3认同)

Cal*_*son 17

您可以使用维基百科用于空格/的下划线_等替换正斜杠.用下划线等替换特殊字符是常见的做法.

  • 这是常见的做法,但这不是最佳做法.使用转义字符是最佳实践,因为每个浏览器都理解这一点,每个服务器都理解这一点,每个开发人员都应该学会这样做.UNERScores也很糟糕!我只是这样说,因为我以前也这样做,并且学到了它回来的困难方式并且狠狠地刺痛你. (3认同)

Ani*_*kur 7

你需要逃避这些,但不要只是%2F手动替换它.你可以用URLEncoder它.

例如 URLEncoder.encode(url, "UTF-8")

然后你可以说

yourUrl = "www.musicExplained/index.cfm/artist/" + URLEncoder.encode(VariableName, "UTF-8")
Run Code Online (Sandbox Code Playgroud)

  • URLEncoder函数未在某些浏览器中定义,例如Chrome.所以我建议使用`encodeURIComponent`,https://www.w3schools.com/jsref/jsref_encodeuricomponent.asp (8认同)