【问题标题】:slashes in url variablesurl 变量中的斜线
【发布时间】:2024-01-10 17:27:01
【问题描述】:

我已将我的 Coldfusion 应用程序设置为在页面上具有动态 url,例如

www.musicExplained/index.cfm/artist/:VariableName

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

www.musicExplained/index.cfm/artist/GZA/Genius

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

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

【问题讨论】:

    标签: url escaping


    【解决方案1】:

    您需要将斜杠转义为%2F

    【讨论】:

    • 这是标准的 URL 编码。
    • IIS 仍将其截获为/ 并中断路由。 :(
    • Apache 将此解释为 / 并中断路由,除非启用 AllowEncodedSlashes 指令(默认情况下已关闭)
    • 你可以使用encodeURIComponentdecodeURIComponent来达到这个目的。
    • 我会推荐 %5C 而不是 %2F
    【解决方案2】:

    您可以轻松地将正斜杠 / 替换为下划线 _ 之类的东西,例如 Wikipedia 用于空格。用下划线等替换特殊字符是常见的做法。

    【讨论】:

    • 这是常见的做法,但不是最佳做法。使用转义字符是最佳实践,因为每个浏览器都明白这一点,每个服务器都明白这一点,每个开发人员都应该学会这样做。下划线也对 SEO 不利!我只是这么说,因为我以前也这样做过,并且学会了它回来并刺痛你的艰难方式。
    • @ppumkin - 你为什么这么认为?使用转义字符并不是真正的最佳实践,因为它会生成对用户不友好的 URL,并且对于非技术用户来说可能看起来很奇怪。我认为最好尽量保持 URL 的合理性
    • 关于UNderscores ARE BAD FOR SEO 评论。下划线被谷歌解释为下​​划线,破折号/连字符被解释为空格。为什么?程序员,很多程序员都使用 Google(包括早期的 Google 自己),如果他们将下划线视为空格,您将无法在搜索结果中找到 foo_bar(可能是某种类)。 Blah blah... 总之:如果您了解您正在“优化”的搜索引擎实际上是如何工作的,那么下划线对 SEO 来说还不错。
    【解决方案3】:

    您需要将其转义,但不要只是手动将其替换为 %2F。您可以为此使用URLEncoder

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

    那你可以说

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

    【讨论】:

    【解决方案4】:

    查看有关“HTML URL 编码参考”的 w3schools 页面: https://www.w3schools.com/tags/ref_urlencode.asp

    因为 / 你会用 %2F 转义

    【讨论】:

      最近更新 更多