2012-01-01 13 views

Odpowiedz

1

Kilka dobrych kategorie zostały stworzone dla robi tylko to, czego potrzebujesz: http://iosdevelopertips.com/networking/a-better-url-encoding-method.html http://www.cocoanetics.com/2009/08/url-encoding/

Uzasadnieniem pozostawiając niektóre znaki są poza mną ... z wyjątkiem stwierdzenia, że ​​definicja funkcji: 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.

Aby być całkowicie poprawnym, + i & są legalnymi znakami w adresie URL, podczas gdy spacja nie jest. W związku z tym metoda będzie poprawnie uciec z przestrzeni, ale pozostawia nienaruszone + i &.

Czytanie RFC2396 http://www.ietf.org/rfc/rfc2396.txt - zdefiniowano zestaw zarezerwowanych i niezarezerwowanych znaków. Domyślam się, że żadna z tych postaci nie jest chroniona przez stringByAddingPercentEscapesUsingEncoding.

+0

Teraz potrzebuję tylko kilku minut, aby przeczytać ten dokument ... :) –

5

Należy uważać, aby nie spowodować wycieku pamięci na konwersje podczas korzystania z CFStringRef. Oto, co wymyśliłem, aby pracować ze znakami łacińskimi i innymi. Używam tego, aby uciec moim parametrom, a nie całemu adresowi URL. W zależności od przypadku użycia, może być konieczne dodanie lub usunięcie znaków z "escapeChars"

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

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

Mam nadzieję, że to pomoże.

Powiązane problemy