2010-07-23 2 views
3

Я работаю над проектом iPhone. Я получаю фрагмент HTML из RSS-канала и пытаюсь загрузить его в UIWebView с помощью метода loadHTMLString.UIWebView и кодированная строка HTML?

Строка, которую я получаю из канала, кодируется в формате HTML. Когда я передаю его в webview, он отображает декодированный HTML, то есть он показывает теги вместе с содержимым страницы.

Есть ли способ в Objective-C для декодирования HTML до передачи его в UIWebView?

EDIT: Добавление пример закодированного HTML:

Это очень длинный проход, но вот фрагмент кода:

<li>Wireless Data: Wi-Fi (802.11b/g), Nike + iPod support built in, Maps location-based service, Bluetooth 2.1 + EDR</li> 
    <li>Audio Frequency Response: 20Hz to 20,000Hz</li> 
    <li>Audio Formats Supported: <span>AAC </span>(16 to 320 Kbps), Protected <span>AAC </span>(from iTunes Store), <span>MP3 </span>(16 to 320 Kbps), <span>MP3 VBR</span>, Audible (formats 2, 3, and 4), Apple Lossless, <span>WAV</span>, and <span>AIFF</span></li> 
    <li>Photo Support: Syncs iPod-viewable photos in <span>JPEG</span>, BMP, <span>GIF</span>, TIFF, <span>PSD </span>(Mac only), and <span>PNG</span> formats</li> 
    <li>TV Out Support: 480p and 576p</li> 
    <li>Video Support: H.264 video, up to 1.5 Mbps, 640 by 480 pixels, 30 frames per second, Low-Complexity version of the H.264 Baseline Profile with <span>AAC</span>-LC audio up to 160 Kbps, 48kHz, stereo audio in .m4v, .mp4, and .mov file formats; H.264 video, up to 2.5 Mbps, 640 by 480 pixels, 30 frames per second, Baseline Profile up to Level 3.0 with <span>AAC</span>-LC audio up to 160 Kbps, 48kHz, stereo audio in .m4v, .mp4, and .mov file formats; <span>MPEG</span>-4 video, up to 2.5 Mbps, 640 by 480 pixels, 30 frames per second, Simple Profile with <span>AAC</span>-LC audio up to 160 Kbps, 48kHz, stereo audio in .m4v, .mp4, and .mov file formats</li> 
    <li>Environmental Requirements: Operating temperature: 32° to 95° F (0° to 35° C); Nonoperating temperature: -4° to 113° F (-20° to 45° C), Relative humidity: 5% to 95% noncondensing</li> 
+0

Метод '-loadHTMLString: baseURL:' должен работать нормально. Укажите, что представляет собой ваша строка HTML, и как вы помещаете ее в веб-просмотр. –

ответ

4

Быстрый и грязный способ заключается в использовании -stringByReplacingOccurrencesOfString: withString: в заменить закодированные объекты XML с их эквивалентными символами:

NSString *fragment = ...; // get fragment from RSS feed 
[fragment autorelease]; // if not already autoreleased to prevent a memory leak 

fragment = [fragment stringByReplacingOccurrencesOfString:@"&lt;" withString:@"<"]; 
// repeat for &gt; &amp; &quot; etc. 

Есть и другие варианты: использовать подобные методы на NSMutableString, регулярные выражения (IOS 4 или RegexKitLite) или написать простой парсер, но этот способ будет работать отлично, если ваши фрагменты HTML не огромны.

+0

Это сделало трюк. Я думал, что может быть метод удобства в классе NSData или NSURL, который обрабатывал это для вас, но я думаю, нет ... Спасибо! –

+0

Существует много HTML-объектов, как мы можем их кодировать для всех из них? – Satyam

5

Подобный @ ответ Дона, но с несколько более оптимизаций:

NSMutableString * html = [NSMutableString stringWithString:originalHTML]; 
NSDictionary * replacements = [NSDictionary dictionaryWithObjectsAndKeys: 
           @"<", @"&lt;", 
           @">", @"&gt;", 
           ...., 
           nil]; 
for (NSString * htmlEntity in replacements) { 
    [html replaceOccurrencesOfString:htmlEntity withString:[replacements objectForKey:htmlEntity] options:0 range:NSMakeRange(0, [html length])]; 
} 

Некоторые другие идеи: Загрузите оригинал HTML в WebView, а затем использовать некоторые JavaScript, чтобы извлечь обработанную текст, затем передать возвращенный текст обратно в веб-просмотр в качестве источника. Вероятно, это будет не очень эффективно, но это может сработать.

Есть также несколько других опций, которые можно найти по адресу googling "cocoa decode html entity".

Смежные вопросы