对URL字符串进行编码以使其符合rfc2396并解码符合rfc2396的字符串的最佳方法是什么,例如,将%20替换为空格字符?
编辑: URLEncoder和URLDecoder类做而不是编码/解码rfc2396兼容的URL,它们编码为MIME类型的应用程序/x-www-表单-URLEncoder,用于编码HTML参数数据。
发布于 2009-02-23 20:21:26
使用URI类如下所示:
URI uri = new URI("http", "//www.someurl.com/has spaces in url", null);
URL url = uri.toURL();或者如果你想要一个字符串:
String urlString = uri.toASCIIString();发布于 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’。如果不打算在路径中包含包含空格或加号的段,则可以忽略这种差异。
发布于 2008-11-20 12:22:26
javadocs建议使用java.net.URI类来完成编码。为了确保URI类正确编码url,必须使用多参数构造函数之一。这些构造函数将执行所需的编码,但要求您将任何url字符串解析为参数。
如果要解码,则必须使用单个参数构造函数构造URI,该构造函数不执行任何编码。然后,您可以调用方法(如getPath()等)来检索和构建已解码的URL。
https://stackoverflow.com/questions/304806
复制相似问题