Codifica URL e NSString di codifica HTML
-
13-09-2019 - |
Domanda
Esiste un metodo per codificare/decodificare HTML e URL (in Xcode, utilizzando Objective-C)?
[NSString stringWithContentsOfFile:<#(NSString *)path#> encoding:<#(NSStringEncoding)enc#> error:<#(NSError **)error#>]
Questo non sembra funzionare come mi aspettavo.Ho pensato che convertirà caratteri speciali come "<" in entità HTML equivalenti, ad es."<" in questo caso.
Ecco un riferimento al collegamento w3school relativo a questo argomento (generale):
Riferimento alla codifica URL HTML
Ringraziando in anticipo.
Soluzione
Restituisce una rappresentazione del ricevitore utilizzando una determinata codifica per determinare la percentuale di escape necessaria per convertire il ricevitore in una stringa URL legale.
- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
E
Restituisce una nuova stringa creata sostituendo nel ricevitore tutti gli escape percentuali con i caratteri corrispondenti determinati da una determinata codifica.
- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
Altri suggerimenti
Il metodo che citi legge un file dal disco con una determinata codifica dei caratteri (come UTF-8 o ASCII).Non ha nulla a che fare con l'escape dell'URL o dell'HTML.
Se desideri aggiungere gli escape percentuali dell'URL, desideri questo metodo:
[myString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
Assicurati di leggere la documentazione su questo metodo, perché ci sono alcune sottigliezze su ciò che sfugge e ciò che lascia stare.In alcuni casi, potrebbe essere necessario utilizzare il metodo più complesso, ma più flessibile, CFURLCreateStringByAddingPercentEscapes()
.(Se lo fai, tieni presente che puoi trasmettere CFStringRef
A NSString *
e viceversa.)
Non c'è nulla di integrato che io sappia per eseguire l'escape di entità in stile XML/HTML, ma questa funzione dovrebbe gestire le nozioni di base:
NSString * convertToXMLEntities(NSString * myString) {
NSMutableString * temp = [myString mutableCopy];
[temp replaceOccurrencesOfString:@"&"
withString:@"&"
options:0
range:NSMakeRange(0, [temp length])];
[temp replaceOccurrencesOfString:@"<"
withString:@"<"
options:0
range:NSMakeRange(0, [temp length])];
[temp replaceOccurrencesOfString:@">"
withString:@">"
options:0
range:NSMakeRange(0, [temp length])];
[temp replaceOccurrencesOfString:@"\""
withString:@"""
options:0
range:NSMakeRange(0, [temp length])];
[temp replaceOccurrencesOfString:@"'"
withString:@"'"
options:0
range:NSMakeRange(0, [temp length])];
return [temp autorelease];
}
Per eseguire la codifica di entità HTML/XML, puoi utilizzare una funzione CFMutableString:
NSString *result = .....;
CFStringTransform((CFMutableStringRef)result, NULL, kCFStringTransformToXMLHex, false);
Impostando l'ultimo parametro di CFStringTransform su true, dovrebbe funzionare anche per la decodifica di entità (esadecimali).
Utilizzo CFStringTransform
per la codifica/decodifica dell'entità HTML:
CFStringTransform((CFTypeRef)yourMutableString, NULL, CFSTR("Any-Hex/XML"), FALSE );
È necessario utilizzare la trasformazione ICU "Any-Hex/XML". kCFStringTransformToXMLHex
non è abbastanza aggressivo.