stringByAddingPercentEscapesUsingEncoding逃脱的字符是什么?

til*_*arr 7 escaping objective-c nsstring

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

Hea*_*065 5

使用CFStringRef时,请注意不要在转换时泄漏内存.这就是我用拉丁字符和其他人工作的结果.我用它来逃避我的参数,而不是整个URL.根据您的使用情况,您可能需要在"escapeChars"中添加或删除字符

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

NSString *encodedString = (__bridge_transfer NSString *) CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge_retained CFStringRef) url, NULL, escapeChars, kCFStringEncodingUTF8);
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.


iku*_*dia 1

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

省略某些字符的理由超出了我的范围......除了说该函数的定义是: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.

完全正确的是,+ 和 & 是 URL 中的合法字符,而空格则不是。因此,该方法将正确转义空格,但保留 + 和 & 完好无损。

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