url 变量中的斜线

Posted

技术标签:

【中文标题】url 变量中的斜线【英文标题】:slashes in url variables 【发布时间】:2011-02-28 20:26:26 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

那些是正常的,或正向的,斜线。不是反斜杠。 【参考方案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")

【讨论】:

有些浏览器没有定义函数URLEncoder,例如:铬合金。所以我建议使用encodeURIComponent,w3schools.com/jsref/jsref_encodeuricomponent.asp【参考方案4】:

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

因为 / 你会用 %2F 转义

【讨论】:

以上是关于url 变量中的斜线的主要内容,如果未能解决你的问题,请参考以下文章

对网址中的斜线/进行urlencode的定义在哪

URL 结构首选项 - 斜线还是不斜线?

python web开发-flask中url带斜线/和不带斜线/的区别详解

从 http 重定向到 https 时,从 url 中删除斜线

nginx配置proxy_pass URL末尾加与不加/(斜线)的区别

nginx 配置proxy_pass URL末尾加与不加/(斜线)的区别