根据标题,当在应用程序中使用自定义 URL 方案时,URL 的最大长度是多少?
例如,如果我通过 URL 启动另一个应用程序,并使用类似的东西传递一个数据块
myappscheme://some/path?data=0123456789ABCDEF
在 URL 被切断(或系统根本拒绝启动其他应用程序)之前,该字符串可以得到多长时间?
根据标题,当在应用程序中使用自定义 URL 方案时,URL 的最大长度是多少?
例如,如果我通过 URL 启动另一个应用程序,并使用类似的东西传递一个数据块
myappscheme://some/path?data=0123456789ABCDEF
在 URL 被切断(或系统根本拒绝启动其他应用程序)之前,该字符串可以得到多长时间?
不幸的是,答案似乎不可用。我能找到的任何 iOS 文档中都没有专门定义 max len。
正如上面 MSK 的链接所指出的,URL 基本 url 长度存在限制,而不是 url 的绝对字符串长度。因此,对于最多大约 2000 个字符,这可能是一个安全的选择。
但是,在测试中似乎没有上限。我能够在 iOS 上毫无问题地使用 365,535 个字符的 URL。但是没有要求苹果继续支持它,所以它是“使用风险自负”。然而,我想说的是,基于许多应用程序正在使用它来传输信息,包括应用程序之间的大量数据,Apple 可能会继续支持它,因为似乎没有理由减少长度.
(以下是另一个问题的答案的转贴,但它也直接回答了这里的问题。)
在 Apple 平台 (iOS/iPadOS/macOS/tvOS/watchOS) 上,限制为2 GB长的 URL 方案,如Swift 源代码中的此评论所示:
// Make sure the URL string isn't too long. // We're limiting it to 2GB for backwards compatibility with 32-bit executables using NS/CFURL if ( (urlStringLength > 0) && (urlStringLength <= INT_MAX) ) { ...
在 iOS 上,我已经测试并确认即使是 300+ MB 长的 URL 也可以接受。你可以在 Objective-C 中尝试这样长的 URL:
NSString *path = [@"a:" stringByPaddingToLength:314572800 withString:@"a" startingAtIndex:0];
NSString *js = [NSString stringWithFormat:@"window.location.href = \"%@\";", path];
[self.webView stringByEvaluatingJavaScriptFromString:js];
并抓住它是否成功:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"length: %@", @(request.URL.absoluteString.length));
return YES;
}
上面的答案具有误导性。文档并没有真正提到它,但路径和文件名确实有长度限制。
您可以在此处看到文件路径或名称可以占用的长度有限制。你可以检查这些syslimits.h
。
#define NAME_MAX 255 /* max bytes in a file name */
#define PATH_MAX 1024 /* max bytes in pathname */
您可以记录它们并亲自查看,如下所示:
NSLog(@"PATH MAX VALUE: %i", PATH_MAX)
UTF-8 中的路径限制为 1024 个字节或 1024 个字符。路径中的文件名限制为 255 个字节或 UTF-8 中的 255 个字符。
我在尝试处理已编码日文字符的文件时遇到了这个问题(这会显着延长 URL/名称)。我唯一的解决方案是立即裁剪名称。
您可以在此 Apple 支持页面上看到他们谈论某些语言(如韩语或日语)的字符如何占用更多字节并导致问题(尽管它们并没有真正提供解决问题的好方法):
我创建了一个简单的项目来测量 limit,目前看来即使是巨大的兆字节也可以。显然,在未来依赖这个数字是不明智的。
参考http://en.wikipedia.org/wiki/URI_scheme:
方案名称由一系列字符组成,以字母开头,后跟字母、数字、加号 ("+")、句点 (".") 或连字符 ("-") 的任意组合。尽管方案不区分大小写,但规范形式是小写的,并且指定方案的文档必须使用小写字母。它后跟一个冒号(“:”)。
长度无关紧要。