Jawaban yang diterima dari melakukan hanya Jsoup.parse(html).text()
memiliki 2 masalah potensial (dengan JSoup 1.7.3):
- Ini menghapus jeda baris dari teks
- Ini mengubah teks
<script>
menjadi<script>
Jika Anda menggunakan ini untuk melindungi terhadap XSS, ini agak menjengkelkan. Ini adalah kesempatan terbaik saya untuk solusi yang ditingkatkan, menggunakan JSoup dan 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);
Perhatikan bahwa langkah terakhir adalah karena saya perlu menggunakan output sebagai teks biasa. Jika Anda hanya membutuhkan output HTML maka Anda harus dapat menghapusnya.
Dan di sini ada banyak kasus uji (input ke output):
{"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"}
Jika Anda menemukan cara untuk membuatnya lebih baik, beri tahu saya.