stringByAddingPercentEscapesUsingEncoding逃脱的字符是什么?

时间:2012-01-01 15:46:13

标签: objective-c nsstring escaping

我不得不从stringByAddingPercentEscapesUsingEncoding切换到CFURLCreateStringByAddingPercentEscapes,因为它不会转义问号(?)。我很好奇它究竟逃脱了什么,以及部分转义与RFC 3986背后的基本原理。

2 个答案:

答案 0 :(得分:5)

使用CFStringRef时,请注意不要在转换时泄漏内存。这就是我提出的与拉丁字符和其他人一起工作的内容。我用它来逃避我的参数,而不是整个URL。根据您的使用情况,您可能需要在" escapeChars"

中添加或删除字符
CFStringRef escapeChars = (CFStringRef)@"%;/?¿:@&=$+,[]#!'()*<>¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ \"\n";

NSString *encodedString = (__bridge_transfer NSString *) CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge_retained CFStringRef) url, NULL, escapeChars, kCFStringEncodingUTF8);

我希望这会有所帮助。

答案 1 :(得分:1)

已经创建了一些很好的类别来满足您的需求: http://iosdevelopertips.com/networking/a-better-url-encoding-method.html http://www.cocoanetics.com/2009/08/url-encoding/

将某些字符排除在外的理由超出了我...除了说该函数的定义是:Returns a representation of the receiver using a given encoding to determine the percent escapes necessary to convert the receiver into a legal URL string.

完全正确,+和&amp;是URL中的合法字符,而空格则不是。因此,该方法将正确地逃离空间,但留下+和&amp;完好。

阅读RFC2396 http://www.ietf.org/rfc/rfc2396.txt - 定义了一组保留和未保留的字符。我的猜测是这些字符都没有被stringByAddingPercentEscapesUsingEncoding转义。