Кодировать NSString для XML / HTML - PullRequest
24 голосов
/ 29 апреля 2009

Есть ли способ HTML-кодирования строки (NSString) в Objective-C, что-то вроде Server.HtmlEncode в .NET?

Ответы [ 15 ]

1 голос
/ 18 февраля 2011

Я собрал быстрый пример проекта, используя ответы Майка и Тода здесь .

Упрощает кодирование / дешифрование просто:

NSString *html = @"<p>This \"paragraph\" contains quoted & 'single' quoted stuff.</p>";
NSLog(@"Original String: %@", html);

NSString *escapedHTML = [html xmlSimpleEscapeString];
NSLog(@"Escaped String: %@", escapedHTML);

NSString *unescapedHTML = [escapedHTML xmlSimpleUnescapeString];
NSLog(@"Unescaped String: %@", unescapedHTML);
0 голосов
/ 28 августа 2018

Я нашел единственный способ, который использует только встроенные функции (не разбирает вручную) и охватывает все случаи. Требуется AppKit / UIKit в дополнение к Foundation. Это Свифт, но легко может быть Objective-C:

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!
}
0 голосов
/ 19 июля 2017

Используйте сообщение в примере ниже:

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

Это преобразует команду 'новой строки' в соответствующий HTML-код. Но чтобы преобразовать символы, вы должны написать соответствующий номер HTML. Вы можете увидеть полный список номеров HTML здесь

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

0 голосов
/ 09 сентября 2016

См. Ответ ниже:

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];
0 голосов
/ 11 февраля 2015

Это самое простое решение - создать категорию, как показано ниже:

Вот заголовочный файл категории:

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

А вот и реализация:

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

И теперь мы можем просто сделать это:

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

Кредиты для этого ответа идет на веб-сайте ниже: -

http://madebymany.com/blog/url-encoding-an-nsstring-on-ios
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...