2009-11-03 6 views
9

Est-ce une méthode pour encoder/décoder du HTML et de l'URL (dans Xcode, en utilisant Objective-C)?Codage d'URL et codage HTML NSStrings

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

Cela ne semble pas fonctionner comme prévu. Je pensais qu'il va convertir des caractères spéciaux comme "<" en entités HTML équivalentes, c'est-à-dire "<" dans ce cas.

est ici une référence au lien w3school lié à ce sujet (général):

HTML URL Encoding Reference

HTML Entities Reference

Remerciant en prévision.

Répondre

19

Renvoie une représentation du récepteur à l'aide d'un codage donné afin de déterminer le pourcentage d'échappement nécessaire pour convertir le récepteur en chaîne d'URL légale.

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

et

retourne une nouvelle chaîne formée par le remplacement, dans le récepteur pour cent tout échappe aux caractères correspondants tels que déterminés par un codage donné.

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

Lisez les autres réponses pour des méthodes pour citer des chaînes comme XML (par exemple, remplacement d'entité et <à <) –

11

La méthode que vous citez lit un fichier à partir du disque avec un codage de caractères donné (par exemple UTF-8 ou ASCII). Cela n'a rien à voir avec l'échappement d'URL ou de HTML.

Si vous voulez ajouter échappe URL pour cent, vous voulez cette méthode:

[myString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 

Assurez-vous de lire la documentation sur cette méthode, car il y a certaines subtilités sur ce qu'il échappe et ce qu'il laisse seul. Dans certains cas, vous devrez peut-être utiliser le plus complexe, mais plus flexible, CFURLCreateStringByAddingPercentEscapes(). (Si vous faites, notez que vous pouvez lancer CFStringRef-NSString * et vice versa.)

Il n'y a rien construit que je sache faire l'entité XML/style HTML échapper, mais cette fonction doit gérer les bases:

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, votre code ressemble à un jardin français formel. –

+1

Si j'écrivais ceci pour mon propre code, j'aurais en fait défini une méthode --replaceOccurrencesOfString: withString: dans une catégorie sur NSMutableString et utilisée pour éviter la répétition. (J'aurais probablement écrit cela comme une méthode NSMutableString au lieu d'une fonction, aussi, à y penser.) Mais je ne voulais pas trop y inclure. –

+0

Découvrez la réponse de CocoaFu. C'est correct. –

3

pour faire entité HTML/XML encodage, vous pouvez utiliser une fonction CFMutableString:

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

en définissant le dernier paramètre de CFStringTransform true, cela devrait fonctionner pour décoder (hex) entités aussi bien.

3

Utilisation CFStringTransform pour l'entité HTML codage/décodage:

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

Vous devez utiliser l'unité de soins intensifs transformer "Any-Hex/XML". kCFStringTransformToXMLHex n'est pas assez agressif.

+0

Quels types d'entités sont manqués par kCFStringTransformToXMLHex? –

+1

@StevenKramer Par exemple,> ou &. – fzwo