Прежде всего, я нашел это: Objective C HTML escape / unescape , но у меня это не работает.
Мои закодированные символы (взятые из RSS-канала, кстати) выглядят так: &
Я поискал по всей сети и нашел связанные обсуждения, но не исправил мою конкретную кодировку, я думаю, что они называются шестнадцатеричными символами.
iphone
html
objective-c
cocoa
cocoa-touch
трезник
источник
источник
&#...;
в строке эквивалентным символом.8
.Ответы:
Они называются ссылками на сущности символов . Когда они принимают форму,
&#<number>;
они называются ссылками на числовые объекты . По сути, это строковое представление байта, который следует заменить. В случае&
, он представляет символ со значением 38 в схеме кодировки символов ISO-8859-1, то есть&
.Причина, по которой амперсанд должен быть закодирован в RSS, заключается в том, что это зарезервированный специальный символ.
Что вам нужно сделать, так это проанализировать строку и заменить объекты байтом, соответствующим значению между
&#
и;
. Я не знаю каких-либо отличных способов сделать это в цели C, но этот вопрос о переполнении стека может помочь.Изменить: после ответа на этот вопрос около двух лет назад есть несколько отличных решений; см. ответ @Michael Waterfall ниже.
источник
Проверьте мою категорию NSString для HTML . Вот доступные методы:
источник
Книга Даниэля в основном очень хороша, и я исправил там несколько проблем:
удален пропускающий символ для NSSCanner (в противном случае пробелы между двумя непрерывными объектами будут игнорироваться
[сканер setCharactersToBeSkipped: nil];
исправлен синтаксический анализ, когда есть изолированные символы '&' (я не уверен, какой для этого 'правильный' вывод, я просто сравнил его с firefox):
например
вот модифицированный код:
источник
Начиная с iOS 7, вы можете декодировать символы HTML изначально, используя атрибут
NSAttributedString
сNSHTMLTextDocumentType
атрибутом:Декодированная строка с атрибутами теперь будет отображаться как: & & <> ™ © ♥ ♣ ♠ ♦.
Примечание. Это будет работать, только если вызывается в основном потоке.
источник
Кажется, никто не упоминает один из самых простых вариантов: Google Toolbox для Mac
(несмотря на название, это работает и на iOS).
https://github.com/google/google-toolbox-for-mac/blob/master/Foundation/GTMNSString%2BHTML.h
И мне пришлось включить в проект всего три файла: заголовок, реализацию и
GTMDefines.h
.источник
Я должен опубликовать это на GitHub или что-то в этом роде. Это входит в категорию NSString, используется
NSScanner
для реализации и обрабатывает как шестнадцатеричные, так и десятичные числовые символы, а также обычные символьные.Кроме того, он относительно изящно обрабатывает искаженные строки (когда у вас есть &, за которым следует недопустимая последовательность символов), что оказалось решающим в моем выпущенном приложении, которое использует этот код.
источник
goto
s как ужасного стиля кода. Вы должны заменить строкуgoto finish;
наbreak;
.Я делаю это с помощью фреймворка RegexKitLite следующим образом :
}
Надеюсь, это кому-то поможет.
источник
вы можете использовать только эту функцию для решения этой проблемы.
источник
Вот версия ответа Уолти Юнга на Swift :
источник
На самом деле отличный фреймворк MWFeedParser Майкла Уотерфолла (ссылался на его ответ) был разветвлен rmchaara, который обновил его с поддержкой ARC!
Вы можете найти его в Github здесь
Он действительно отлично работает, я использовал метод stringByDecodingHTMLEntities и работает безупречно.
источник
Как будто вам нужно другое решение! Это довольно просто и довольно эффективно:
источник
Если у вас есть ссылка на символьную сущность в виде строки, например
@"2318"
, вы можете извлечь перекодированную NSString с правильным символом Юникода, используяstrtoul
;источник
Swift 3 версия ответа Jugale
источник