Phân tích HTML thành NSAttributionText - làm cách nào để đặt phông chữ?


132

Tôi đang cố gắng để có một đoạn văn bản được định dạng bằng html để hiển thị độc đáo trên iPhone trong UITableViewCell.

Cho đến nay tôi có điều này:

NSError* error;
NSString* source = @"<strong>Nice</strong> try, Phil";
NSMutableAttributedString* str = [[NSMutableAttributedString alloc] initWithData:[source dataUsingEncoding:NSUTF8StringEncoding]
                                                           options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                                                     NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]}
                                                              documentAttributes:nil error:&error];

Đây là loại công trình. Tôi nhận được một số văn bản có chữ 'Đẹp' in đậm! Nhưng ... nó cũng đặt phông chữ là Times Roman! Đây không phải là khuôn mặt phông chữ tôi muốn. Tôi nghĩ rằng tôi cần phải thiết lập một cái gì đó trong tài liệu Tài liệu, nhưng, tôi không thể tìm thấy bất kỳ ví dụ nào ở bất cứ đâu.


1
Lưu ý: NSHTMLTextDocumentType có thể có khả năng chậm. Xem stackoverflow.com/questions/21166752/ từ
finneycanhelp 23/2/2015

QUAN TRỌNG: Nếu bạn đang sử dụng phông chữ tùy chỉnh, bạn cần xem câu trả lời này stackoverflow.com/a/60786178/1223897
Yuvrajsinh

Câu trả lời:


117

Phiên bản Swift 2 , dựa trên câu trả lời được đưa ra bởi Javier Querol

extension UILabel {
    func setHTMLFromString(text: String) {
        let modifiedFont = NSString(format:"<span style=\"font-family: \(self.font!.fontName); font-size: \(self.font!.pointSize)\">%@</span>", text) as String

        let attrStr = try! NSAttributedString(
            data: modifiedFont.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
            options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding],
            documentAttributes: nil)

        self.attributedText = attrStr
    }
}

Swift 3.0 và iOS 9+

extension UILabel {
    func setHTMLFromString(htmlText: String) {
        let modifiedFont = String(format:"<span style=\"font-family: '-apple-system', 'HelveticaNeue'; font-size: \(self.font!.pointSize)\">%@</span>", htmlText)

        let attrStr = try! NSAttributedString(
            data: modifiedFont.data(using: .unicode, allowLossyConversion: true)!,
            options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue],
            documentAttributes: nil)

        self.attributedText = attrStr
    }
}

Swift 5 và iOS 11+

extension UILabel {
    func setHTMLFromString(htmlText: String) {
        let modifiedFont = String(format:"<span style=\"font-family: '-apple-system', 'HelveticaNeue'; font-size: \(self.font!.pointSize)\">%@</span>", htmlText)

        let attrStr = try! NSAttributedString(
            data: modifiedFont.data(using: .unicode, allowLossyConversion: true)!,
            options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue],
            documentAttributes: nil)

        self.attributedText = attrStr
    }
}

1
Không thay đổi phông chữ hiện tại, đây là những gì tôi đang tìm kiếm, cảm ơn người đàn ông!
Mohammad Zaid Pathan

2
Những công việc này. Bạn có thể đặt chuỗi đã sửa đổi thành Chuỗi ngay lập tức và bỏ qua việc khởi tạo NSString tức là "<span style = \" font-family: (self.font! .FontName); cỡ chữ: (self.font! .pointSize) \ "> (văn bản) </ span>"
Matthew Korporaal

2
Để làm cho công việc này, (hoạt động thực sự rất tốt) tôi đã phải thêm các trích dẫn duy nhất xung quanh giá trị họ phông chữ để <div style = \ "font-family: '(self.font! .FontName)'; ....
geraldcor

4
Tôi nghĩ, kể từ iOS9, tốt nhất nên sử dụng font-family: '-apple-system', 'HelveticaNeue';(hoạt động và cũng tương thích ngược). Nếu bạn chỉ hỗ trợ iOS9 font-family: -apple-system;thì có thể sử dụng
Daniel

1
Cũng tiện dụng là khả năng thiết lập màu văn bản, chỉ cần thêm màu vào thuộc tính style với giá trị ở định dạng chuỗi hex color: #000000. Xem liên kết này để chuyển đổi UIColor thành chuỗi hex: gist.github.com/yannickl/16f0ed38f0698d9a8ae7
Miroslav Hrivik

114
#import "UILabel+HTML.h"

@implementation UILabel (HTML)

- (void)jaq_setHTMLFromString:(NSString *)string {

    string = [string stringByAppendingString:[NSString stringWithFormat:@"<style>body{font-family: '%@'; font-size:%fpx;}</style>",
                                              self.font.fontName,
                                              self.font.pointSize]];
    self.attributedText = [[NSAttributedString alloc] initWithData:[string dataUsingEncoding:NSUnicodeStringEncoding]
                                                           options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                                                     NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
                                                documentAttributes:nil
                                                             error:nil];
}


@end

Bằng cách này, bạn không cần chỉ định phông chữ nào bạn muốn, nó sẽ lấy phông chữ và kích thước của nhãn.


2
Điều này rất thanh lịch!
Merlevede

2
Đẹp. Mặc dù nó có ý nghĩa hơn như là một thể loại trên NSAttributionString imo.
Dimitris

@Javier Querol Sau đó, làm thế nào để xử lý các liên kết clinks?
KarenAnne

Bạn mã hóa chuỗi thành dữ liệu NSUnicodeStringEncodingvà sau đó mã hóa dữ liệu trở lại ký tự NSUTF8StringEncoding. Là nó ổn?
Timur Bernikovich

1
xin lỗi - giải pháp này KHÔNG hoạt động với tôi, phông chữ không được đặt thành phông chữ mong muốn. - thay vì sử dụng self.font.fontName và thay vào đó sử dụng self.font.familyName không đặt phông chữ mong muốn nhưng sau đó các thẻ HTML không được giữ nguyên. xem giải pháp bên dưới không hoạt động và không dựa vào việc sử dụng các kiểu HTML dưới bất kỳ hình thức nào. -rrh
Richie Hyatt

49

Tôi thực sự tìm thấy một giải pháp làm việc cho vấn đề này:

Thay đổi phông chữ trong chuỗi phản hồi HTML của bạn trước khi được phân tích cú pháp.

NSString *aux = [NSString stringWithFormat:@"<span style=\"font-family: YOUR_FONT_NAME; font-size: SIZE\">%@</span>", htmlResponse];

Thí dụ:

NSString *aux = [NSString stringWithFormat:@"<span style=\"font-family: HelveticaNeue-Thin; font-size: 17\">%@</span>", [response objectForKey:@"content"]];

Phiên bản Swift:

let aux = "<span style=\"font-family: YOUR_FONT_NAME; font-size: SIZE\">\(htmlResponse)</span>"

4
Giải pháp dễ nhất .. Các câu trả lời khác có thể đúng nhưng thực hiện mọi thứ theo cách khó hơn là không thông minh .. :)
Sameera Chathuranga

2
Câu trả lời hay nhất và thông minh
Tariq

Câu trả lời thông minh nhất, đồng ý! Chúc mừng
Jim Tierney

xin chào, thực sự điều này hoạt động rất tốt, nhưng nếu tôi chuyển đổi văn bản được gán lại này thành html, kích thước phông chữ sẽ tăng lên trong html đó
Mehul Thakkar

1
Trên thực tế từ sự trợ giúp từ các bài đăng khác qua stackoverflow .. tôi có thể chuyển đổi văn bản được chứng thực thành html và mọi thứ hoạt động tốt ngoài kích thước phông chữ, điều đó đang tăng gấp đôi gần như
Mehul Thakkar

41

Tìm ra. Bit của một con gấu, và có thể không phải là câu trả lời tốt nhất.

Mã này sẽ đi qua tất cả các thay đổi phông chữ. Tôi biết rằng nó đang sử dụng "Times New Roman" và "Times New Roman BoldMT" cho các phông chữ. Nhưng bất kể, điều này sẽ tìm thấy các phông chữ đậm và để tôi đặt lại chúng. Tôi cũng có thể thiết lập lại kích thước trong khi tôi đang ở đó.

Tôi thực sự hy vọng / nghĩ rằng có một cách để thiết lập điều này vào lúc phân tích cú pháp, nhưng tôi không thể tìm thấy nó nếu có.

    NSRange range = (NSRange){0,[str length]};
    [str enumerateAttribute:NSFontAttributeName inRange:range options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:^(id value, NSRange range, BOOL *stop) {
        UIFont* currentFont = value;
        UIFont *replacementFont = nil;

        if ([currentFont.fontName rangeOfString:@"bold" options:NSCaseInsensitiveSearch].location != NSNotFound) {
            replacementFont = [UIFont fontWithName:@"HelveticaNeue-CondensedBold" size:25.0f];
        } else {
            replacementFont = [UIFont fontWithName:@"HelveticaNeue-Thin" size:25.0f];
        }

        [str addAttribute:NSFontAttributeName value:replacementFont range:range];
    }];

2
Tìm kiếm từ "ĐẬM" trong tên phông chữ là một loại bùn khủng khiếp! Điều này cũng phá vỡ các thuộc tính phông chữ khác như chữ nghiêng.
HughHughTeotl

1
Một cách tiếp cận chung hơn là xem xét các đặc điểm phông chữ trong khi liệt kê và tạo một phông chữ có cùng đặc điểm. Tôi sẽ đăng mã của tôi dưới đây.
markiv

33

Một cách tiếp cận chung hơn là xem xét các đặc điểm phông chữ trong khi liệt kê và tạo một phông chữ có cùng các đặc điểm (in đậm, in nghiêng, v.v.):

extension NSMutableAttributedString {

    /// Replaces the base font (typically Times) with the given font, while preserving traits like bold and italic
    func setBaseFont(baseFont: UIFont, preserveFontSizes: Bool = false) {
        let baseDescriptor = baseFont.fontDescriptor
        let wholeRange = NSRange(location: 0, length: length)
        beginEditing()
        enumerateAttribute(.font, in: wholeRange, options: []) { object, range, _ in
            guard let font = object as? UIFont else { return }
            // Instantiate a font with our base font's family, but with the current range's traits
            let traits = font.fontDescriptor.symbolicTraits
            guard let descriptor = baseDescriptor.withSymbolicTraits(traits) else { return }
            let newSize = preserveFontSizes ? descriptor.pointSize : baseDescriptor.pointSize
            let newFont = UIFont(descriptor: descriptor, size: newSize)
            self.removeAttribute(.font, range: range)
            self.addAttribute(.font, value: newFont, range: range)
        }
        endEditing()
    }
}

Mặc dù điều này không ngắn gọn lắm, nhưng nó có vẻ ổn định hơn so với việc hack xung quanh vấn đề với việc gói html với nhiều html hơn.
syvex

23

Vâng, có một giải pháp dễ dàng hơn. Đặt phông chữ trong nguồn html!

NSError* error;
NSString* source = @"<strong>Nice</strong> try, Phil";
source = [source stringByAppendingString:@"<style>strong{font-family: 'Avenir-Roman';font-size: 14px;}</style>"];
NSMutableAttributedString* str = [[NSMutableAttributedString alloc] initWithData:[source dataUsingEncoding:NSUTF8StringEncoding]
                                                           options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                                                     NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]}
                                                              documentAttributes:nil error:&error];

Hi vọng điêu nay co ich.


23

Swift 4+ cập nhật tiện ích mở rộng UILabel

extension UILabel {
    func setHTMLFromString(text: String) {
        let modifiedFont = NSString(format:"<span style=\"font-family: \(self.font!.fontName); font-size: \(self.font!.pointSize)\">%@</span>" as NSString, text)

        let attrStr = try! NSAttributedString(
            data: modifiedFont.data(using: String.Encoding.unicode.rawValue, allowLossyConversion: true)!,
            options: [NSAttributedString.DocumentReadingOptionKey.documentType:NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue],
            documentAttributes: nil)

        self.attributedText = attrStr
    }
}

iOS 9+

extension UILabel {
    func setHTMLFromString(htmlText: String) {
        let modifiedFont = NSString(format:"<span style=\"font-family: '-apple-system', 'HelveticaNeue'; font-size: \(self.font!.pointSize)\">%@</span>" as NSString, htmlText) as String


        //process collection values
        let attrStr = try! NSAttributedString(
            data: modifiedFont.data(using: .unicode, allowLossyConversion: true)!,
            options: [NSAttributedString.DocumentReadingOptionKey.documentType:NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue],
            documentAttributes: nil)


        self.attributedText = attrStr
    }
}

8

Các câu trả lời trên đều hoạt động tốt nếu bạn đang thực hiện chuyển đổi cùng lúc với việc tạo NSAttributedString. Nhưng tôi nghĩ rằng một giải pháp tốt hơn, hoạt động trên chính chuỗi và do đó không cần truy cập vào đầu vào, là loại sau:

extension NSMutableAttributedString
{
    func convertFontTo(font: UIFont)
    {
        var range = NSMakeRange(0, 0)

        while (NSMaxRange(range) < length)
        {
            let attributes = attributesAtIndex(NSMaxRange(range), effectiveRange: &range)
            if let oldFont = attributes[NSFontAttributeName]
            {
                let newFont = UIFont(descriptor: font.fontDescriptor().fontDescriptorWithSymbolicTraits(oldFont.fontDescriptor().symbolicTraits), size: font.pointSize)
                addAttribute(NSFontAttributeName, value: newFont, range: range)
            }
        }
    }
}

Sử dụng như là:

let desc = NSMutableAttributedString(attributedString: *someNSAttributedString*)
desc.convertFontTo(UIFont.systemFontOfSize(16))

Hoạt động trên iOS 7+


Tìm kiếm mọi nơi cho việc này ... !! Cảm ơn..!
Irshad Qureshi

5

Cải thiện giải pháp của Victor, bao gồm màu sắc:

extension UILabel {
      func setHTMLFromString(text: String) {
          let modifiedFont = NSString(format:"<span style=\"color:\(self.textColor.toHexString());font-family: \(self.font!.fontName); font-size: \(self.font!.pointSize)\">%@</span>", text) as String

          let attrStr = try! NSAttributedString(
              data: modifiedFont.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
              options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding],
              documentAttributes: nil)

          self.attributedText = attrStr
      }
  }

Để làm việc này, bạn cũng sẽ cần YLColor.swift của chuyển đổi u màu sang hex https://gist.github.com/yannickl/16f0ed38f0698d9a8ae7


4

Việc sử dụng NSHTMLTextDocumentType là các kiểu chậm và khó kiểm soát. Tôi đề nghị bạn thử thư viện của tôi được gọi là Atributika. Nó có trình phân tích cú pháp rất nhanh của riêng mình. Ngoài ra, bạn có thể có bất kỳ tên thẻ và xác định bất kỳ phong cách cho chúng.

Thí dụ:

let str = "<strong>Nice</strong> try, Phil".style(tags:
    Style("strong").font(.boldSystemFont(ofSize: 15))).attributedString

label.attributedText = str

Bạn có thể tìm thấy nó ở đây https://github.com/psharanda/Atributika


4

Kết hợp các câu trả lời của mọi người lại với nhau, tôi đã tạo hai phần mở rộng cho phép đặt nhãn bằng văn bản html. Một số câu trả lời ở trên không diễn giải chính xác họ phông chữ trong các chuỗi được quy. Những người khác không đầy đủ cho nhu cầu của tôi hoặc thất bại theo những cách khác. Hãy cho tôi biết nếu có bất cứ điều gì bạn muốn tôi cải thiện.

Tôi hi vọng điêu nay se giup được ai đo.

extension UILabel {
    /// Sets the label using the supplied html, using the label's font and font size as a basis.
    /// For predictable results, using only simple html without style sheets.
    /// See /programming/19921972/parsing-html-into-nsattributedtext-how-to-set-font
    ///
    /// - Returns: Whether the text could be converted.
    @discardableResult func setAttributedText(fromHtml html: String) -> Bool {
        guard let data = html.data(using: .utf8, allowLossyConversion: true) else {
            print(">>> Could not create UTF8 formatted data from \(html)")
            return false
        }

        do {
            let mutableText = try NSMutableAttributedString(
                data: data,
                options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue],
                documentAttributes: nil)
            mutableText.replaceFonts(with: font)
            self.attributedText = mutableText
            return true
        } catch (let error) {
            print(">>> Could not create attributed text from \(html)\nError: \(error)")
            return false
        }
    }
}

extension NSMutableAttributedString {

    /// Replace any font with the specified font (including its pointSize) while still keeping
    /// all other attributes like bold, italics, spacing, etc.
    /// See /programming/19921972/parsing-html-into-nsattributedtext-how-to-set-font
    func replaceFonts(with font: UIFont) {
        let baseFontDescriptor = font.fontDescriptor
        var changes = [NSRange: UIFont]()
        enumerateAttribute(.font, in: NSMakeRange(0, length), options: []) { foundFont, range, _ in
            if let htmlTraits = (foundFont as? UIFont)?.fontDescriptor.symbolicTraits,
                let adjustedDescriptor = baseFontDescriptor.withSymbolicTraits(htmlTraits) {
                let newFont = UIFont(descriptor: adjustedDescriptor, size: font.pointSize)
                changes[range] = newFont
            }
        }
        changes.forEach { range, newFont in
            removeAttribute(.font, range: range)
            addAttribute(.font, value: newFont, range: range)
        }
    }
}

giải pháp hoàn chỉnh duy nhất hoạt động cho UILabelUITextView. cảm ơn!
Radu Ursache

3

Cảm ơn câu trả lời, tôi thực sự thích tiện ích mở rộng nhưng tôi chưa chuyển đổi sang swift. Đối với những học sinh cũ vẫn còn ở Objective-C, điều này sẽ giúp một chút: D

-(void) setBaseFont:(UIFont*)font preserveSize:(BOOL) bPreserve {

UIFontDescriptor *baseDescriptor = font.fontDescriptor;

[self enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, [self length]) options:0 usingBlock:^(id  _Nullable value, NSRange range, BOOL * _Nonnull stop) {

    UIFont *font = (UIFont*)value;
    UIFontDescriptorSymbolicTraits traits = font.fontDescriptor.symbolicTraits;
    UIFontDescriptor *descriptor = [baseDescriptor fontDescriptorWithSymbolicTraits:traits];
    UIFont *newFont = [UIFont fontWithDescriptor:descriptor size:bPreserve?baseDescriptor.pointSize:descriptor.pointSize];

    [self removeAttribute:NSFontAttributeName range:range];
    [self addAttribute:NSFontAttributeName value:newFont range:range];

}];    } 

Chúc mừng mã hóa! - Khung greg


1
Cảm ơn Chúa cho các học sinh cũ! :-)
Josef Rysanek

1

Swift 3 Chuỗi mở rộng bao gồm một phông chữ không. Thuộc tính không có phông chữ được lấy từ câu hỏi SO khác, không nhớ cái nào :(

extension String {
    var html2AttributedString: NSAttributedString? {
        guard let data = data(using: .utf8) else {
            return nil
        }

        do {
            return try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil)
        }
        catch {
            print(error.localizedDescription)
            return nil
        }
    }

    public func getHtml2AttributedString(font: UIFont?) -> NSAttributedString? {
        guard let font = font else {
            return html2AttributedString
        }

        let modifiedString = "<style>body{font-family: '\(font.fontName)'; font-size:\(font.pointSize)px;}</style>\(self)";

        guard let data = modifiedString.data(using: .utf8) else {
            return nil
        }

        do {
            return try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil)
        }
        catch {
            print(error)
            return nil
        }
    }
}

0

Đây là một phần mở rộng cho NSString trả về NSAttributionString bằng Objective-C.

Nó xử lý chính xác một chuỗi với các thẻ HTML và đặt màu Phông chữ và Phông chữ mong muốn trong khi duy trì các thẻ HTML bao gồm BÓNG, ITALICS ...

Điều tuyệt nhất là nó không dựa vào bất kỳ dấu HTML nào để đặt các thuộc tính phông chữ.

@implementation NSString (AUIViewFactory)

- (NSAttributedString*)attributedStringFromHtmlUsingFont:(UIFont*)font fontColor:(UIColor*)fontColor
{
    NSMutableAttributedString* mutableAttributedString = [[[NSAttributedString alloc] initWithData:[self dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute : @(NSUTF8StringEncoding)} documentAttributes:nil error:nil] mutableCopy]; // parse text with html tags into a mutable attributed string
    [mutableAttributedString beginEditing];
    // html tags cause font ranges to be created, for example "This text is <b>bold</b> now." creates three font ranges: "This text is " , "bold" , " now."
    [mutableAttributedString enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, mutableAttributedString.length) options:0 usingBlock:^(id value, NSRange range, BOOL* stop)
    { // iterate every font range, change every font to new font but preserve symbolic traits such as bold and italic (underline and strikethorugh are preserved automatically), set font color
        if (value)
        {
            UIFont* oldFont = (UIFont*)value;
            UIFontDescriptor* fontDescriptor = [font.fontDescriptor fontDescriptorWithSymbolicTraits:oldFont.fontDescriptor.symbolicTraits];
            UIFont* newFont = [UIFont fontWithDescriptor:fontDescriptor size:font.pointSize];
            [mutableAttributedString removeAttribute:NSFontAttributeName range:range]; // remove the old font attribute from this range
            [mutableAttributedString addAttribute:NSFontAttributeName value:newFont range:range]; // add the new font attribute to this range
            [mutableAttributedString addAttribute:NSForegroundColorAttributeName value:fontColor range:range]; // set the font color for this range
        }
    }];
    [mutableAttributedString endEditing];
    return mutableAttributedString;
}

@end

-3

Trên thực tế, một cách thậm chí dễ dàng hơn và sạch hơn tồn tại. Chỉ cần đặt phông chữ sau khi phân tích cú pháp HTML:

 NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding]
                                                                     options:@{
                                                                               NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                                                               NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
                                                          documentAttributes:nil error:nil];
    [text addAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"Lato-Regular" size:20]} range:NSMakeRange(0, text.length)];

14
Điều đó hoạt động, nhưng bạn sẽ mất đậm và in nghiêng <b> và <u> vì những chữ này được ghi đè bằng phông chữ.
Ông Zystem
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.