stringByAddingPercentEscapesUsingEncoding转义的字符是什么?

7

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

2个回答

5

在使用CFStringRef进行转换时要小心不要泄漏内存。以下是我设计的用于处理拉丁字符和其他字符的方法。我使用它来转义我的参数而不是整个URL。根据您的使用情况,您可能需要添加或删除“escapeChars”中的字符。

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

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

我希望这有所帮助。

1

已经创建了一些适合您需要的好类别:

http://iosdevelopertips.com/networking/a-better-url-encoding-method.html

http://www.cocoanetics.com/2009/08/url-encoding/

留下某些字符的原因超出我的理解……除了说函数的定义是:使用给定的编码返回接收器的表示形式,以确定将接收器转换为合法URL字符串所需的百分比转义。

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

阅读RFC2396 http://www.ietf.org/rfc/rfc2396.txt - 定义了一组保留和非保留字符。我猜测,stringByAddingPercentEscapesUsingEncoding 不会对这些字符进行转义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接