Какие символы экранирует stringByAddingPercentEscapesUsingEncoding? - PullRequest
7 голосов
/ 01 января 2012

Мне пришлось переключиться с stringByAddingPercentEscapesUsingEncoding на CFURLCreateStringByAddingPercentEscapes, потому что он не экранирует вопросительные знаки (?). Мне любопытно, что именно он избегает, и обоснование частичного выхода против RFC 3986.

Ответы [ 2 ]

5 голосов
/ 20 марта 2012

Будьте осторожны, чтобы не допустить утечки памяти при преобразованиях при использовании CFStringRef. Вот что я придумал для работы с латинскими символами и другие. Я использую это для экранирования моих параметров, а не всего URL. В зависимости от вашего варианта использования может потребоваться добавить или удалить символы из escapeChars

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

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

Надеюсь, это поможет.

1 голос
/ 01 января 2012

Некоторые хорошие категории были созданы для того, чтобы делать именно то, что вам нужно: 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.

Чтобы быть полностью правильным, + и & являются допустимыми символами в URL, тогда как пробел - нет.Следовательно, метод будет корректно выходить из пробела, но оставляет + и & нетронутыми.

Чтение RFC2396 http://www.ietf.org/rfc/rfc2396.txt - определен набор зарезервированных и незарезервированных символов.Я предполагаю, что ни один из этих символов не экранируется с помощью stringByAddingPercentEscapesUsingEncoding.

...