首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编解码rfc2396网址

编解码rfc2396网址
EN

Stack Overflow用户
提问于 2008-11-20 09:49:44
回答 4查看 13.6K关注 0票数 10

对URL字符串进行编码以使其符合rfc2396并解码符合rfc2396的字符串的最佳方法是什么,例如,将%20替换为空格字符?

编辑: URLEncoder和URLDecoder类做而不是编码/解码rfc2396兼容的URL,它们编码为MIME类型的应用程序/x-www-表单-URLEncoder,用于编码HTML参数数据。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-23 20:21:26

使用URI类如下所示:

代码语言:javascript
复制
URI uri = new URI("http", "//www.someurl.com/has spaces in url", null);
URL url = uri.toURL();

或者如果你想要一个字符串:

代码语言:javascript
复制
String urlString = uri.toASCIIString();
票数 12
EN

Stack Overflow用户

发布于 2008-11-20 14:02:14

组件部分(可能包含必须转义的字符)在连接到URI之前应该已经使用URLEncoder进行了转义。

如果您有一个带外字符的URI (比如空格、“<>[]{}\^‘和非ASCII字节),那么它实际上不是URI。您可以尝试通过手动对它们进行%转义来修复它们,但是这是一种最后的修复操作,而不是一种标准的编码形式。当您接受来自用户输入的可能格式错误的URI时,这通常是必要的,但这不是一个标准化的操作,而且我不知道有任何内置的Java库函数可以为您完成此操作;您可能需要使用RegExp自己黑一些东西。

另一方面,您必须将URI拆分到其组件部分(每个单独的路径部分、查询参数名称和值等),然后才能将每个部分(使用URLDecoder)取消转义。没有合理的方法一次解码整个URI;您可以尝试‘解码%-转义而不解码为分隔符’(如/?=&;%),但是会留下一个奇怪的不一致字符串,它不符合任何URI处理标准。

URLEncoder/URLDecoder可以很好地处理URI查询组件,包括名称和值。但是,它们不太适合处理URI路径部件组件。区别在于,“+”字符并不意味着路径部分中的空格。您可以使用一个简单的字符串替换来修复这个问题:在URLEncoding之后,将‘+’替换为‘%20’;在URLDecoding之前,将‘+’替换为‘%2B’。如果不打算在路径中包含包含空格或加号的段,则可以忽略这种差异。

票数 2
EN

Stack Overflow用户

发布于 2008-11-20 12:22:26

javadocs建议使用java.net.URI类来完成编码。为了确保URI类正确编码url,必须使用多参数构造函数之一。这些构造函数将执行所需的编码,但要求您将任何url字符串解析为参数。

如果要解码,则必须使用单个参数构造函数构造URI,该构造函数不执行任何编码。然后,您可以调用方法(如getPath()等)来检索和构建已解码的URL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/304806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档