2009-11-03 26 views
9

¿Es un método para codificar/decodificar HTML y URL (en Xcode, usando Objective-C)?Codificación URL y codificación HTML NSStrings

[NSString stringWithContentsOfFile:<#(NSString *)path#> encoding:<#(NSStringEncoding)enc#> error:<#(NSError **)error#>] 

Esto no parece funcionar como me esperaba. Pensé que convertiría caracteres especiales como "<" a entidades HTML equivalentes, es decir, "<" en este caso.

Aquí hay una referencia al enlace w3school relacionado con este tema (general):

HTML URL Encoding Reference

HTML Entities Reference

Agradeciendo de anticipación.

Respuesta

19

Devuelve una representación del receptor utilizando una codificación dada para determinar el porcentaje de escapes necesarios para convertir el receptor en una cadena URL legal.

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

y

devuelve una nueva cadena hecha mediante la sustitución en el receptor todo ciento escapa con a los caracteres coincidentes según lo determinado por una codificación determinada.

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 
+1

Leer las otras respuestas para los métodos para citar a cadenas como XML (es decir, la sustitución entidad y

11

El método usted cita lee un archivo de disco con una codificación de caracteres dada (como UTF-8 o ASCII). No tiene nada que ver con el escape de URL o HTML.

Si desea agregar escapa URL ciento, desea que este método:

[myString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 

asegúrese de leer la documentación acerca de este método, porque hay ciertas sutilezas acerca de lo que se escapa y lo deja solo. En algunos casos, puede que tenga que usar el CFURLCreateStringByAddingPercentEscapes() más complejo, pero más flexible. (Si lo hace, tenga en cuenta que usted puede echar CFStringRef a NSString * y viceversa.)

No hay nada construido en el que yo sepa hacer entidad XML/estilo HTML escapar, pero esta función debe manejar los conceptos básicos:

NSString * convertToXMLEntities(NSString * myString) { 
    NSMutableString * temp = [myString mutableCopy]; 

    [temp replaceOccurrencesOfString:@"&" 
          withString:@"&amp;" 
          options:0 
           range:NSMakeRange(0, [temp length])]; 
    [temp replaceOccurrencesOfString:@"<" 
          withString:@"&lt;" 
          options:0 
           range:NSMakeRange(0, [temp length])]; 
    [temp replaceOccurrencesOfString:@">" 
          withString:@"&gt;" 
          options:0 
           range:NSMakeRange(0, [temp length])]; 
    [temp replaceOccurrencesOfString:@"\"" 
          withString:@"&quot;" 
          options:0 
           range:NSMakeRange(0, [temp length])]; 
    [temp replaceOccurrencesOfString:@"'" 
          withString:@"&apos;" 
          options:0 
           range:NSMakeRange(0, [temp length])]; 

    return [temp autorelease]; 
} 
+8

Wow, el código tiene un jardín francés formal. –

+1

Si escribiera esto para mi propio código, realmente habría definido un método -replaceOccurrencesOfString: withString: en una categoría en NSMutableString y lo usé para evitar la repetición. (Probablemente lo haya escrito como un método NSMutableString en lugar de una función, también, ahora que lo pienso). Pero no quería incluir demasiado en esto. –

+0

Mira la respuesta de CocoaFu. Es correcto. –

3

para hacer HTML/XML entidad de codificación, puede utilizar una función CFMutableString:

NSString *result = .....;
CFStringTransform((CFMutableStringRef)result, NULL, kCFStringTransformToXMLHex, false);

estableciendo el último parámetro de CFStringTransform true, se debe trabajar para la decodificación (hex) entidades también.

3

Uso CFStringTransform para HTML entidad de codificación/decodificación:

CFStringTransform((CFTypeRef)yourMutableString, NULL, CFSTR("Any-Hex/XML"), FALSE);

Es necesario utilizar la UCI transformar "Cualquier-Hex/XML". kCFStringTransformToXMLHex no es lo suficientemente agresivo.

+0

¿Qué tipo de entidades se pierden por kCFStringTransformToXMLHex? –

+1

@StevenKramer Por ejemplo,> o &. – fzwo