La réponse acceptée de faire a simplement Jsoup.parse(html).text()
2 problèmes potentiels (avec JSoup 1.7.3):
- Il supprime les sauts de ligne du texte
- Il convertit le texte
<script>
en<script>
Si vous l'utilisez pour vous protéger contre XSS, c'est un peu ennuyeux. Voici ma meilleure image d'une solution améliorée, utilisant à la fois JSoup et 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);
Notez que la dernière étape est parce que je dois utiliser la sortie en texte brut. Si vous n'avez besoin que d'une sortie HTML, vous devriez pouvoir la supprimer.
Et voici un tas de cas de test (entrée à sortie):
{"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"}
Si vous trouvez un moyen de l'améliorer, faites-le moi savoir.