Ios 编码URL包含特殊字符
我有一个包含特殊字符的URL(%经常使用)。。我想编码的网址,如何? 这是我的URL的一个示例: 我尝试了以下方法:Ios 编码URL包含特殊字符,ios,objective-c,special-characters,encode,nsurl,Ios,Objective C,Special Characters,Encode,Nsurl,我有一个包含特殊字符的URL(%经常使用)。。我想编码的网址,如何? 这是我的URL的一个示例: 我尝试了以下方法: // Option - 1. NSString* str = [self.shareURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // Option - 2. NSString *unsafeString = @"this &string= confuses ? the
// Option - 1.
NSString* str = [self.shareURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// Option - 2.
NSString *unsafeString = @"this &string= confuses ? the InTeRwEbZ";
CFStringRef safeString = CFURLCreateStringByAddingPercentEscapes (
NULL,
(CFStringRef)unsafeString,
NULL,
CFSTR("/%&=?$#+-~@<>|\\*,.()[]{}^!"),
kCFStringEncodingUTF8
);
// Option - 3.
NSString *escapedString = [unescaped stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
//选项-1。
NSString*str=[self.shareURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//备选方案2。
NSString*unsafeString=@“this&string=混淆了InTeRwEbZ”;
CFStringRef safeString=cfurlCreateStringByAddingPercents转义(
无效的
(CFStringRef)不安全,
无效的
CFSTR(“/%&=?$\+-~@\\*,.()[]{}^!”),
kCFStringEncodingUTF8
);
//备选方案-3。
NSString*escapedString=[unescaped stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
正如您所说,是一个错误的URL。你应该有什么好的URL
为什么会有//after.com?按顺序处理您的三种变体:
stringbyaddingpercentescapesusingencode
非常方便,可以解决URL中包含%
的问题
然而,这种方法非常有限,不能解决许多常见的问题。例如,如果您好奇的URL路径字符串中有一个?
?此方法将使问号不被替换(因为问号在URL中作为分隔请求开始参数的一种方式是有效的),如果您确实需要?
作为该路径的一部分,则在这种情况下,这将是一个问题
在实践中,虽然人们喜欢通过添加百分比escapesusingencode作为对百分比逃避问题的回答来建议string,但它总是无法提供足够的控制来充分完成这项工作
?
)。您还可以指定哪些通常转义的字符可能希望不转义
关于此函数示例的三个观察结果:
- 您已经指定了一大组要转义的字符,包括一些本来应该转义的字符。包含这些额外的字符并没有什么坏处,但表明对这个函数的作用有一点误解
- 同样,您正在转义一些不需要转义的字符(
、
和-
)~
- 最后,当我们在Objective-C代码中使用此函数时,通常会将其作为
返回,并使用NSString
或CfBridgegRelease
转移所有权。这使我们不必处理核心基础类型,而必须手工编写代码> cFrRelys<代码>。p>\uBridge\uTransfer
- (NSString *)percentEscapeString:(NSString *)string
{
return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)string,
NULL,
(CFStringRef)@":/?@!$&'()*+,;=",
kCFStringEncodingUTF8));
}
顺便说一下,如果您执行这种百分比转义例程,请在URL的各个组件上执行(例如,仅在名称中带有“50%”的路径部分),而不是整个URL。URL中有一些字符是有效的(例如,/
或:
),但在此路径中无效,因此您希望对路径中的这些字符进行百分比转义,而不是对整个URL进行转义
string。在IOS 7中引入的这种方法提供了与上述核心基础函数相同的控制级别,但没有桥接的麻烦。只要选择合适的字符集,它就会从那里开始
是的,你是对的,我不知道我以前怎么没有想到这一点,坦克斯