2015-12-19 21 views
5

Tüm resimleri bir HTML sayfasından silmek için Jsoup kullanıyorum. Sayfayı bir HTTP yanıtı aracılığıyla alıyorum - bu da içerik karakterini içerir.Jsoup özel karakterleri kaldırır

Sorun, Jsoup'un bazı özel karakterleri çıkarmamasıdır. Örneğin

, giriş için:

<html><head></head><body><p>isn&rsquo;t</p></body></html> 

String check = "<html><head></head><body><p>isn&rsquo;t</p></body></html>"; 
Document doc = Jsoup.parse(check); 
System.out.println(doc.outerHtml()); 

çalıştırdıktan sonra alıyorum:

<html><head></head><body><p>isn’t</p></body></html><p></p> 

ben dışında başka bir şekilde html değişen kaçınmak istiyorum görüntüleri kaldırmak için. komutunu kullanarak

:

doc.outputSettings().prettyPrint(false).charset("ASCII").escapeMode(EscapeMode.extended); 

ben doğru çıktı almak yapmak ama bu karakter kümesi iyi olmayacaktır durumlar vardır eminim. Sadece HTTP üstbilgisinde belirtilen karakter kümesini kullanmak istiyorum ve korkarım bu, belgemi tahmin edemeyeceğim şekillerde değiştirecektir. Görüntüleri yanlışlıkla değiştirmeksizin görüntüleri çıkarmak için başka bir temizleyici yöntemi var mı?

Teşekkür ederiz!

cevap

3

HTTP üstbilgisinde belirtilenler dışında herhangi bir karakter kümesini içermeyen bir geçici çözüm.

String check = "<html><head></head><body><p>isn&rsquo;t</p></body></html>".replaceAll("&([^;]+?);", "**$1;"); 

Document doc = Jsoup.parse(check); 

doc.outputSettings().prettyPrint(false).escapeMode(EscapeMode.extended); 

System.out.println(doc.outerHtml().replaceAll("\\*\\*([^;]+?);", "&$1;")); 

ÇIKIŞ

<html><head></head><body><p>isn&rsquo;t</p></body></html> 

TARTIŞMA ben Jsoup en API bir çözüm olsaydı

- @dlv

Jsoup'API'yi kullanmak için özel bir NodeVisitor yazmanız gerekir. Jsoup'un içinde mevcut olan bazı kodları (yeniden) icat eder. Özel Nodevisitor, bir unicode karakteri yerine bir HTML çıkış kodu oluşturur.

Başka bir seçenek, özel karakter kodlayıcısı yazmayı içerir. Varsayılan UTF-8 karakter kodlayıcısı &rsquo; kodlayabilir. Bu yüzden Jsoup, nihai HTML kodunda orijinal kaçış sırasını korumaz.

Yukarıdaki iki seçenekten herhangi biri büyük bir kodlama çabasını temsil eder. Nihayetinde, son HTML kodunda karakterlerin nasıl oluşturulacağını seçmemize izin veren Jsoup'a bir geliştirme eklenebilir: onaltılık kaçış (&#AB;), onluk kaçış (&#151;), orijinal çıkış sırası (&rsquo;) veya kodlanmış karakteri (Gönderinizdeki durumdur).

+0

Teşekkürler, Jsoup'un API'sinde bir çözüm bulunmasına rağmen, bunu şimdilik kullanacağım. – dlv

+0

@dlv Lütfen güncellememi görün. – Stephan

+0

Teşekkür ederiz! Bu gerçekten bilgilendirici. – dlv

İlgili konular