29 Stimmen

NSString für XML/HTML kodieren

Gibt es eine Möglichkeit, HTML codieren eine Zeichenfolge (NSString) in Objective-C, etwas entlang der Linien von Server.HtmlEncode in .NET?

0voto

Hashim Akhtar Punkte 755

Die einfachste Lösung ist, eine Kategorie wie unten zu erstellen:

Hier ist die Header-Datei der Kategorie:

#import <Foundation/Foundation.h>
@interface NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding;
@end

Und hier ist die Umsetzung:

#import "NSString+URLEncoding.h"
@implementation NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
    return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
               (CFStringRef)self,
               NULL,
               (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
               CFStringConvertNSStringEncodingToEncoding(encoding));
}
@end

Und jetzt können wir das einfach tun:

NSString *raw = @"hell & brimstone + earthly/delight";
NSString *url = [NSString stringWithFormat:@"http://example.com/example?param=%@",
            [raw urlEncodeUsingEncoding:NSUTF8StringEncoding]];
NSLog(url);

Der Dank für diese Antwort geht an die folgende Website:-

http://madebymany.com/blog/url-encoding-an-nsstring-on-ios

0voto

user6813279 Punkte 1

Siehe untenstehende Antwort:

NSString *content = global.strPrivacyPolicy;
content =  [[[[[content stringByReplacingOccurrencesOfString: @"&amp;" withString: @"&"]
stringByReplacingOccurrencesOfString:@"&quot;"  withString:@"\" "]
stringByReplacingOccurrencesOfString: @"&#39;"  withString:@"'"]
stringByReplacingOccurrencesOfString: @"&gt;" withString: @">"]
stringByReplacingOccurrencesOfString:  @"&lt;" withString:@"<"];
[_webViewPrivacy loadHTMLString:content baseURL:nil];

0voto

Verwenden Sie die Nachricht aus dem folgenden Beispiel:

anyStringConverted = [anyString stringByReplacingOccurrencesOfString:@"\n" withString:@"<br>"]; 

Damit wird der Befehl "neue Zeile" in den entsprechenden HTML-Code umgewandelt. Um Symbole umzuwandeln, müssen Sie jedoch die entsprechende Html-Nummer angeben. Die vollständige Liste der Html-Nummern finden Sie hier

http://www.ascii.cl/htmlcodes.htm

0voto

xtravar Punkte 1301

Ich habe den einzigen Weg gefunden, der nur integrierte Funktionen verwendet (kein manuelles Parsing) und alle Fälle abdeckt. Erfordert AppKit/UIKit zusätzlich zu Foundation. Dies ist Swift, kann aber leicht Objective-C sein:

func encodedForHTML() -> String {

    // make a plain attributed string and then use its HTML write functionality
    let attrStr = NSAttributedString(string: self)

    // by default, the document outputs a whole HTML element
    // warning: if default apple implementation changes, this may need to be tweaked
    let options: [NSAttributedString.DocumentAttributeKey: Any] = [
            .documentType: NSAttributedString.DocumentType.html,
            .excludedElements: [
                "html",
                "head",
                "meta",
                "title",
                "style",
                "p",
                "body",
                "font",
                "span"
            ]
    ]

    // generate data and turn into string
    let data = try! attrStr.data(from: NSRange(location: 0, length: attrStr.length), documentAttributes: options)
    let str = String(data: data, encoding: .utf8)!

    // remove <?xml line
    return str.components(separatedBy: .newlines).dropFirst().first!
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X