Ваш заголовок

Вопрос или проблема

У меня есть стандартная настройка REST API в WP. Результаты отображаются в приложении для IOS. Теперь возникла проблема, что одинарные и двойные кавычки и & возвращаются в JSON как десятичный код Unicode: например, &#8216. Все остальные символы, похоже, в порядке. Есть идеи по этому поводу?

Я покажу пример того, как вы можете преобразовать HTML в обычный текст на Swift 4.

Этот пример имитирует получение следующего:

WordPress&#8216House –> WordPress’House

  1. Добавьте это расширение, чтобы преобразовать ваш HTML-код в обычную строку:

`

extension Data {
    var html2AttributedString: NSAttributedString? {
        do {
            return try NSAttributedString(data: self, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
        } catch {
            print("error:", error)
            return nil
        }
    }
    var html2String: String {
        return html2AttributedString?.string ?? ""
    }
}

extension String {
    var html2AttributedString: NSAttributedString? {
        return Data(utf8).html2AttributedString
    }
    var html2String: String {
        return html2AttributedString?.string ?? ""
    }
}
  1. Используйте расширение

`

let htmlString = "WordPress&#8216House"

print("String is: ", textFromWP.html2String)

введите описание изображения здесь

Ответ или решение

Для решения проблемы с кодировкой двойных кавычек и других специальных символов (таких как одиночные кавычки и амперсанды), возвращаемых вашим REST API на WordPress в формате JSON, вам необходимо предварительно преобразовать HTML-сущности в обычные текстовые строки на стороне приложения iOS. Ваша проблема возникает из-за того, что некоторые символы представлены в виде кодов Unicode (например, ‘ для одойночной кавычки).

Вы можете использовать следующий подход:

1. Создание расширения для преобразования HTML в обычный текст

Вы можете создать два расширения в Swift, которые помогут вам преобразовать HTML-код в атрибутированную строку и затем в обычную строку.

extension Data {
    var html2AttributedString: NSAttributedString? {
        do {
            return try NSAttributedString(data: self, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
        } catch {
            print("Ошибка:", error)
            return nil
        }
    }
    var html2String: String {
        return html2AttributedString?.string ?? ""
    }
}

extension String {
    var html2AttributedString: NSAttributedString? {
        return Data(utf8).html2AttributedString
    }
    var html2String: String {
        return html2AttributedString?.string ?? ""
    }
}

2. Использование расширения

Теперь, когда у вас есть расширения, вы можете использовать их в вашем проекте для преобразования строк, возвращаемых из API WordPress. Вот пример того, как это сделать:

let htmlString = "WordPress‘House"
let plainText = htmlString.html2String

print("Строка: ", plainText) // Вывод: WordPress' House

3. Объяснение проблемы

Когда вы получаете данные от вашего REST API, они могут содержать закодированные HTML-сущности, такие как ‘, которые не правильно интерпретируются как обычные символы в iOS-приложении. Приведенное выше расширение упрощает процесс обработки этих строк, позволяя вам получать корректные текстовые значения без дополнительных манипуляций.

Заключение

Используя представленный код, вы сможете успешно преобразовать HTML-коды в стандартные текстовые символы и избежать проблем с отображением текста, содержащего кавычки и специальные символы в вашем приложении. Обязательно протестируйте этот процесс с различными строками, чтобы убедиться, что все требуемые символы корректно обрабатываются.

Оцените материал
Добавить комментарий

Капча загружается...