我尝试将这些字符传递给服务器,例如*()$
我用这种方式编写了NSUrl:
NSString *partialURL = [NSString stringWithFormat:@"/%@", commentBody];
NSString *fullURL = [NSString stringWithFormat:@"%@%@", CONST_URL, partialURL];
NSString *encStr = [fullURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:encStr];
但是,在网址中传递的commentBody
仍然有*()$
个内容,而不是编码为utf8。
这样做的正确方法是什么? 谢谢!
答案 0 :(得分:1)
NSString * test = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)validUrl,
NULL,
(CFStringRef)@";/?:@&=$+{}<>,",
kCFStringEncodingUTF8);
<强>更新强>
嗨@Rendy。对不起昨天的快速回复。在跳下之前我只有时间通过一个班轮,并希望你能纠正你遇到的问题。
您始终希望对URL的参数进行编码。如果您有一个URL作为另一个URL的参数或嵌入在某些XML中;你想要编码整个url(这意味着参数得到双重编码 - 因为你获取一个“有效”的URL并将其转义,因此它成为另一个URL中的有效参数(即:
和{{1获取转义,因此参数不会混合在一起。)
如果您愿意,可以在下面的字符串中添加其他字符,它们将替换为百分比编码值。我相信下面的字符串已经涵盖了无效值。
以下是&
上的类别:
NSString
这样称呼:
@implementation NSString (encode)
+ (NSString*)stringEncodedAsUrlParameter:(NSString *)string
{
NSString *newString = NSMakeCollectable(
[(NSString *)CFURLCreateStringByAddingPercentEscapes(
kCFAllocatorDefault,
(CFStringRef)string,
NULL, /* charactersToLeaveUnescaped */
CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"),
kCFStringEncodingUTF8
) autorelease]
);
if (newString) {
return newString;
}
return @"";
}
- (NSString*)stringByEncodingAsUrlParameter
{
return [NSString stringEncodedAsUrlParameter:self];
}
@end
或者:
NSString * escapedParameters = [NSString stringEncodedAsUrlParameter:unescapedParameters];
然后将正确转义的参数添加到您的网址末尾。如果您对整个URL进行编码,则会对“http://”部分进行编码,但它将无效。
我最初从ASIHttpRequest复制了上述内容,但添加的任何错误都是我的。
希望有所帮助!祝你好运!!