网址变量中的斜线


105

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

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

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

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

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

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


4
这些是正常的或正斜杠。不反斜杠。
Caleb Hearth 2010年

Answers:


174

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


好的,这似乎是个好主意,是否有特定理由使用%2F?
namtax 2010年

1
这是标准的URL编码。
Slaks 2010年

44
IIS仍将其拦截为a /并中断路由。:(
Piotr Kula 2014年

21
Apache将其解释为/并中断路由,除非打开AllowEncodedSlashes指令(默认情况下将其关闭)
chim

5
您可以使用encodeURIComponentdecodeURIComponent为此。
Keavon

17

您可以轻松地用/下划线(_例如Wikipedia用于空格)替换下划线。用下划线等替换特殊字符是常见的做法。


4
这是常见的做法,但不是最佳实践。最佳做法是使用转义字符,因为每个浏览器都可以理解这一点,每个服务器都可以理解,每个开发人员都应该学习这种方式。UNDERScores也不利于SEO!我只是说这句话,因为我以前也这样做,并且了解了它回来的艰辛方式并让您感到hard。
Piotr Kula 2014年

1
@ppumkin-您为什么这么认为?使用转义字符并不是真正的最佳实践,因为它产生的URL不友好,并且对非技术用户来说可能很奇怪。我认为最好尝试使URL尽可能合理
vsync

关于UNderscores ARE BAD FOR SEO评论。Google将下划线解释为下划线,将破折号/连字符解释为空格。为什么?编码人员,许多编码人员都使用Google(包括早期的Google在内),如果他们将下划线视为空格,则您将无法foo_bar在搜索结果中找到(可能是某种类)。等等...结论:如果您了解要“优化”搜索引擎的实际工作原理,那么下划线对于SEO来说并不坏。
威廉·伊斯特

8

您需要对它们进行转义,而不仅仅是%2F手动替换它。您可以URLEncoder为此使用。

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

那你可以说

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

9
在某些浏览器(例如Chrome)中未定义URLEncoder函数。因此,我建议使用encodeURIComponentw3schools.com/jsref/jsref_encodeuricomponent.asp

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.