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 指令(默认情况下它已关闭)
你可以使用encodeURIComponent
和decodeURIComponent
来达到这个目的。
我会推荐 %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 变量中的斜线的主要内容,如果未能解决你的问题,请参考以下文章
python web开发-flask中url带斜线/和不带斜线/的区别详解
从 http 重定向到 https 时,从 url 中删除斜线