Вопрос или проблема
У меня есть стандартная настройка REST API в WP. Результаты отображаются в приложении для IOS. Теперь возникла проблема, что одинарные и двойные кавычки и & возвращаются в JSON как десятичный код Unicode: например, ‘. Все остальные символы, похоже, в порядке. Есть идеи по этому поводу?
Я покажу пример того, как вы можете преобразовать HTML в обычный текст на Swift 4.
Этот пример имитирует получение следующего:
WordPress‘House –> WordPress’House
- Добавьте это расширение, чтобы преобразовать ваш 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 ?? ""
}
}
- Используйте расширение
`
let htmlString = "WordPress‘House"
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-коды в стандартные текстовые символы и избежать проблем с отображением текста, содержащего кавычки и специальные символы в вашем приложении. Обязательно протестируйте этот процесс с различными строками, чтобы убедиться, что все требуемые символы корректно обрабатываются.