Java URLEncoder改变特殊字符?
Posted
技术标签:
【中文标题】Java URLEncoder改变特殊字符?【英文标题】:Java URLEncoder changing special character? 【发布时间】:2011-01-18 03:12:31 【问题描述】:我想使用 java 的 URLEncoder class 来编码我的 url 字符串。但是,默认情况下,它将空格转换为“+”(加号)。我希望它使用 '-' 代替(类似于本网站对其 url 的编码方式)。
我想知道最好的方法是什么?我应该只使用它的内置功能然后进行字符串替换(从“+”到“-”)吗?谢谢
【问题讨论】:
【参考方案1】:本网站没有用连字符“编码其 URL”,它首先以这种方式定义它们,显然不需要编码。这取决于他们如何生成 URL。你也可以这样做,但这不是 URLEncoding,它只是生成 URL。将 URLEncoder 用于此任务,它不是为它设计的,并抱怨它完全按照它应该做的而不是你想要的,这是毫无意义的。正如 BalusC 所说,URLEncoder 是您的浏览器和世界各地的 Web 服务器之间的合同的一部分。你无法改变它。
【讨论】:
【参考方案2】:同意@BalusC。
我还想指出,您尝试做的并不是“URL 编码”这个短语的正常意义上的“编码”。编码意味着有一个反向解码步骤可以返回原始 URL。除非您有一些排除“-”字符的业务规则(例如,如果您从“文本”创建 URL 名称,则使用连字符),您的转换将不可逆。
您似乎正在根据某些可能不可逆的规则将 URL 字符串转换为其他 URL 字符串。 URLEncoder 类(它实现了一种特定的标准化可逆编码)没有实现您的(特定于应用程序的)转换,这并不奇怪。
正如@BalusC 指出的那样,正确的方法是在编码之前 转换 URL 字符串(根据您的应用程序的需要)。实际上,在组装完整的 URL 之前,对 URL 字符串的组件进行转换可能会更好(例如更安全)。
(我理所当然地认为这些 URL 是在实际需要 URLEncoder 实现的编码的上下文中使用的。)
【讨论】:
【参考方案3】:URLEncoder
根据specific contract 对 URL 进行编码。您可以而且应该不更改它。确实只是事后做一个字符串替换,或者更好,beforehand。连字符-
即已经是URL 中的有效字符。
String encodedURL = URLEncoder.encode(url.replace(" ", "-"), "UTF-8");
【讨论】:
以上是关于Java URLEncoder改变特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章