Прийнята відповідь робити просто Jsoup.parse(html).text()
має два потенційні питання (з JSoup 1.7.3):
- Це видаляє перерви рядків з тексту
- Він перетворює текст
<script>
у<script>
Якщо ви використовуєте це для захисту від XSS, це трохи дратує. Ось мій найкращий знімок покращеного рішення, використовуючи JSoup та Apache StringEscapeUtils:
// breaks multi-level of escaping, preventing &lt;script&gt; to be rendered as <script>
String replace = input.replace("&", "");
// decode any encoded html, preventing <script> to be rendered as <script>
String html = StringEscapeUtils.unescapeHtml(replace);
// remove all html tags, but maintain line breaks
String clean = Jsoup.clean(html, "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
// decode html again to convert character entities back into text
return StringEscapeUtils.unescapeHtml(clean);
Зауважте, що останній крок - це тому, що мені потрібно використовувати вихідний текст як звичайний текст. Якщо вам потрібен лише вихід HTML, ви зможете його видалити.
І ось купа тестових випадків (вхід для виведення):
{"regular string", "regular string"},
{"<a href=\"link\">A link</a>", "A link"},
{"<script src=\"http://evil.url.com\"/>", ""},
{"<script>", ""},
{"&lt;script&gt;", "lt;scriptgt;"}, // best effort
{"\" ' > < \n \\ é å à ü and & preserved", "\" ' > < \n \\ é å à ü and & preserved"}
Якщо ви знайдете спосіб зробити це краще, повідомте мене про це.