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

Riferimento alle entità HTML

Ringraziando in anticipo.

È stato utile?

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:@"&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];
}

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top