बस करने के स्वीकृत उत्तर Jsoup.parse(html).text()
में 2 संभावित मुद्दे हैं (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"}
यदि आपको इसे बेहतर बनाने का कोई तरीका मिल जाए, तो कृपया मुझे बताएं।