Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在URL查询中转义和?_Ios_Swift - Fatal编程技术网

Ios 如何在URL查询中转义和?

Ios 如何在URL查询中转义和?,ios,swift,Ios,Swift,我到处都找过了,在iOS中还没有找到一个明确的答案。我试图在URL查询中避开符号,但是 stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 没用 作为一个肮脏的工作,我只是用 stringByReplacingOccurrencesOfString("&", withString: "and", options: NSStringCompareO

我到处都找过了,在iOS中还没有找到一个明确的答案。我试图在URL查询中避开符号,但是

stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
没用

作为一个肮脏的工作,我只是用

stringByReplacingOccurrencesOfString("&", withString: "and", options: NSStringCompareOptions.LiteralSearch, range: nil)

虽然这不是最安全的赌注。正确的方法是什么。

您可以将其替换为%26。我不清楚为什么
URLQueryAllowedCharacterSet()
没有捕捉到它。

如果您不需要支持10.10或iOS 8之前的任何内容,可以将NSURLQueryItem与NSURLComponents一起使用

如果您需要支持较旧版本的OS X或iOS,则可以在以下位置找到最终答案:

根据需要,使用适当的桥接器和桥接器转换铸件

您早期方法的问题是,较旧的NSURL API是设计为。。。好吧,不要说得太过分,错了。API假定您希望同时对整个查询字符串甚至整个URL进行编码,因此它们不使用符号和其他类似的保留字符。当然,这通常不是您在实践中真正想要做的,但它是原始NSURL API的所有行为方式


作为补充说明,如果您试图将结果粘贴到例如HTML属性中,则需要执行上述操作,然后使用HTML实体编码方法对其进行第二次编码。有关第二步的帮助,请参阅。

我想下面的代码应该可以工作

NSMutableString * lQueryString = [NSMutableString string];
NSMutableCharacterSet * lQueryAllowedCharacterSet = [[NSMutableCharacterSet alloc]init];
[lQueryAllowedCharacterSet formUnionWithCharacterSet:[NSCharacterSet URLQueryAllowedCharacterSet]];
[lQueryAllowedCharacterSet removeCharactersInString:@"&"];

[lQueryString appendString: [@"SampleQueryValue&" stringByAddingPercentEncodingWithAllowedCharacters: lQueryAllowedCharacterSet]];
NSLog(@"%@",lQueryString);
输出

SampleQueryValue%26
我不确定是否有更多的字符需要从QueryAllowedCharacterSet中删除

理想的方法是

SampleQueryValue%26