NSString* urlEncode(NSString * url)
{
string inStr = StringFromNSString(url);
CFStringRef inStringRef = CFStringCreateWithCString( kCFAllocatorDefault, inStr.c_str(), kCFStringEncodingUTF8 );
NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)inStringRef,NULL,(CFStringRef)@"!*’();:@&=+$,/?%#[]",kCFStringEncodingUTF8 );
return encodedString;
}
我使用上面的方法来编码网址...即使我的应用程序崩溃说
<body>
<div id="content">
<h1>An Error Was Encountered</h1>
<p>The URI you submitted has disallowed characters.</p> </div>
</body>
</html>
terminate called after throwing an instance of 'std::invalid_argument'
what():
任何想法..我的代码出了什么问题?
仅供参考:它在这个方法中崩溃JSONNode jsonObject0 = libJSON :: parse(inResponseData);
更新:我发送消息的服务器是UNIX服务器导致问题吗?
答案 0 :(得分:5)
您无需创建inStr
或inStringRef
临时变量。类型NSString*
和CFStringRef
是“免费桥接”类型。这些类型只需简单的演员即可互换。
您可以在此处找到有关免费桥接的更多信息:http://www.mikeash.com/pyblog/friday-qa-2010-01-22-toll-free-bridging-internals.html
也就是说,您可以将方法简化为以下内容:
-(NSString*) urlEncode
{
NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes( NULL, (CFStringRef)self, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8 );
return [encodedString autorelease];
}
以上最好作为NSString类别实现(注意使用self
作为编码值。)
答案 1 :(得分:2)
这对我来说很好。我使用CFSTR而不是(CFStringRef)@“!*'();:@&amp; = + $,/?%#[]”
- (NSString *)encodedURLParameterString {
NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)self,
NULL,
CFSTR(":/=,!$& '()*+;[]@#?"),
kCFStringEncodingUTF8);
return [result autorelease];
}
答案 2 :(得分:2)
你可以试试这个
NSString *sampleUrl = @"http://www.google.com/search.jsp?params=Java Developer";
NSString* encodedUrl = [sampleUrl stringByAddingPercentEscapesUsingEncoding:
NSASCIIStringEncoding];
答案 3 :(得分:1)
您需要确保您的URL编码不是您需要的。如果您打算将此编码字符串用作实际URL的一部分,那么您应该知道只有部分URL应该被编码,即查询字符串(还有其他位,但是95%的情况下,这与查询有关。)
换句话说,您的网址应为:
scheme://host/path?<key>=<value>&<key>=<value>
在此, ONLY 尖括号内的内容(<key>
和<value>
)应为URL编码。
答案 4 :(得分:1)
这是UNIX服务器中的问题......它提供了错误的数据。
答案 5 :(得分:1)
NSString *encodedstring = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef)yoururlstring,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
此代码完美无缺
答案 6 :(得分:0)
以下是对格式化的URLString进行编码的最佳方法:
urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
而不是使用下面因为它有一些内存管理问题。
NSString *encodedstring = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef)yoururlstring,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);