2012-01-01 11 views

Respuesta

1

Algunos buenos categorías se han creado para hacer justo lo que necesito: http://iosdevelopertips.com/networking/a-better-url-encoding-method.html http://www.cocoanetics.com/2009/08/url-encoding/

La justificación para dejar ciertos caracteres están más allá de mí ... excepto decir que la definición de la función es: 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.

Para ser completamente correcto, + y & son caracteres legales dentro de una URL, mientras que un espacio no lo es. Por lo tanto, el método escapará correctamente de un espacio, pero deja + y & intactos.

Lectura RFC2396 http://www.ietf.org/rfc/rfc2396.txt - hay un conjunto de caracteres reservados y sin reserva definidos. Supongo que ninguno de estos caracteres es escapado por stringByAddingPercentEscapesUsingEncoding.

+0

Ahora solo necesito unos minutos para leer ese documento ... :) –

5

Tenga cuidado de no perder memoria en las conversiones cuando use CFStringRef. Esto es lo que se me ocurrió para trabajar con personajes latinos y otros. Lo uso para escapar de mis parámetros, no de la URL completa. Dependiendo de su caso de uso, puede que tenga que añadir o quitar caracteres de "escapeChars"

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

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

espero que esto ayude.

Cuestiones relacionadas