Java URLEncoder改变特殊字符?

时间:2010-02-18 00:24:30

标签: java url friendly-url

我想使用java的URLEncoder class来编码我的url字符串。但是,默认情况下,它会将空格转换为“+”(加号)。我希望使用' - '代替(类似于此网站如何编码其网址)。

我想知道最好的方法是什么?我应该只使用其内置功能,然后进行字符串替换(从'+'到' - ')?感谢

3 个答案:

答案 0 :(得分:5)

URLEncoder根据specific contract对网址进行编码。您可以而且更改它。事实上,事后只需做一个字符串替换,或者更好,事先。连字符-已经是URL中的有效字符。

String encodedURL = URLEncoder.encode(url.replace(" ", "-"), "UTF-8");

答案 1 :(得分:1)

同意@BalusC。

我还想指出,你试图做的并不是“URL编码”这个短语的正常意义上的“编码”。编码意味着存在反向解码步骤,该步骤将返回原始URL。除非您有一些排除“ - ”字符的业务规则(例如,如果您从“文本”创建URL名称,则为连字符),您的转换将不可逆转。

您似乎正在做的是根据某些可能不可逆的规则将URL字符串转换为其他URL字符串。 URLEncoder类(实现特定的标准化可逆编码)没有实现您的(特定于应用程序的)转换,这一点都不奇怪。

正如@BalusC所指出的,正确的方法是在编码之前转换URL字符串(根据应用程序的需要)。实际上,在汇总完整的URL之前,在URL字符串的组件上实现转换可能会更好(例如更安全)。

(我理所当然地认为URL是在实际需要URLEncoder实现编码的上下文中使用的。)

答案 2 :(得分:1)

这个网站没有用连字符“编码其URL”,它首先以这种方式定义它们,显然这样就不需要编码了。这取决于他们如何生成他们的URL。您也可以这样做,但这不是URLEncoding,而只是生成URL。使用URLEncoder执行此任务,它不是为此而设计的,并且抱怨它完全按照它应该做的而不是你想要的东西是毫无意义的。正如BalusC所说,URLEncoder是浏览器与世界Web服务器之间合同的一部分。你无法改变它。