PHP में strip_tags
फ़ंक्शन होता है जो HTML और PHP टैग को एक स्ट्रिंग से स्ट्रिप्स करता है।
क्या एंड्रॉइड के पास html से बचने का एक तरीका है?
जवाबों:
@Sparkymat द्वारा जुड़े उत्तर में समाधानों को आम तौर पर या तो regex की आवश्यकता होती है - जो कि त्रुटि-प्रवण दृष्टिकोण है - या jsoup या jericho जैसे तृतीय-पक्ष लाइब्रेरी स्थापित करना । Android उपकरणों पर एक बेहतर समाधान सिर्फ Html.fromHtml () फ़ंक्शन का उपयोग करना है:
public String stripHtml(String html) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY).toString();
} else {
return Html.fromHtml(html).toString();
}
}
यह Spanned
बिना किसी HTML टैग के इनपुट HTML का प्रतिनिधित्व बनाने के लिए एंड्रॉइड के एचटीएमएल पार्सर में निर्मित का उपयोग करता है । फिर "स्पैन" मार्कअप को आउटपुट को एक स्ट्रिंग में परिवर्तित करके छीन लिया जाता है।
जैसा कि यहां चर्चा की गई है , एंड्रॉइड एन के बाद से Html.fromHtml व्यवहार बदल गया है। अधिक जानकारी के लिए दस्तावेज़ देखें ।
Html.escapeHtml(String)
यदि आप उन्हें हटाए बिना केवल टैग से बचना चाहते हैं।
Html.fromHtml(html).toString();
कई रिक्त स्थान निकालता है जो हमेशा एक अच्छा विकल्प नहीं होता है।
देर से पोस्ट के लिए खेद है, लेकिन मुझे लगता है कि यह दूसरों के लिए मदद कर सकता है,
बस html स्ट्रिप्स को हटाने के लिए
Html.fromHtml(htmltext).toString()
इस तरह से html टैग को स्ट्रिंग से बदल दिया जाएगा, लेकिन स्ट्रिंग को ठीक से फॉर्मेट नहीं किया जाएगा। इसलिए मैंने किया
Html.fromHtml(htmltext).toString().replaceAll("\n", "").trim()
इस तरह मैं पहली बार रिक्त स्थान के साथ अगली पंक्ति के साथ और रिक्त स्थान को हटा दिया। इसी तरह आप दूसरों को हटा सकते हैं।
आप वैकल्पिक रूप से उपयोग कर सकते हैं Html.escapeHtml(String)
यदि आप एपीआई 16 या इसके बाद के संस्करण को लक्षित कर रहे हैं।
एपीआई 16 से नीचे के लक्ष्यीकरण के लिए, आप कॉल करके नीचे की कक्षा का उपयोग कर सकते हैं, HtmlUtils.escapeHtml(String)
जिसे मैंने केवल स्रोत से खींचा है Html.escapeHtml(String)
।
public class HtmlUtils {
public static String escapeHtml(CharSequence text) {
StringBuilder out = new StringBuilder();
withinStyle(out, text, 0, text.length());
return out.toString();
}
private static void withinStyle(StringBuilder out, CharSequence text,
int start, int end) {
for (int i = start; i < end; i++) {
char c = text.charAt(i);
if (c == '<') {
out.append("<");
} else if (c == '>') {
out.append(">");
} else if (c == '&') {
out.append("&");
} else if (c >= 0xD800 && c <= 0xDFFF) {
if (c < 0xDC00 && i + 1 < end) {
char d = text.charAt(i + 1);
if (d >= 0xDC00 && d <= 0xDFFF) {
i++;
int codepoint = 0x010000 | (int) c - 0xD800 << 10 | (int) d - 0xDC00;
out.append("&#").append(codepoint).append(";");
}
}
} else if (c > 0x7E || c < ' ') {
out.append("&#").append((int) c).append(";");
} else if (c == ' ') {
while (i + 1 < end && text.charAt(i + 1) == ' ') {
out.append(" ");
i++;
}
out.append(' ');
} else {
out.append(c);
}
}
}
}
मैं इस वर्ग का उपयोग कर रहा हूं जो ठीक काम करता है।
यह नई विधि विकल्प (एपीआई 16+) के लिए है:
android.text.Html.escapeHtml(your_html).toString();
Html.fromHtml बड़े html स्ट्रिंग्स के लिए बेहद धीमी हो सकती है।
यहां बताया गया है कि आप इसे कैसे कर सकते हैं, आसानी से और तेजी से jsoup के साथ:
इस रेखा को अपनी श्रेणी फ़ाइल में जोड़ें:
implementation 'org.jsoup:jsoup:1.11.3'
जाँचें कि नवीनतम jsoup संस्करण यहाँ क्या है: https://jsoup.org/download
इस लाइन को अपने कोड में जोड़ें:
String text = Jsoup.parse(htmlStr).text();
लाइन ब्रेक को संरक्षित करने के तरीके जानने के लिए इस लिंक को यहाँ देखें:
HTML को सादे पाठ में बदलने के लिए jsoup का उपयोग करते समय मैं रेखा को कैसे संरक्षित करता हूं?
Spanned spanned;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
spanned = Html.fromHtml(textToShare, Html.FROM_HTML_MODE_LEGACY);
} else {
spanned = Html.fromHtml(textToShare);
}
tv.setText(spanned.toString());
जैसा कि अभी तक इसका उल्लेख नहीं किया गया है, इसे पीछे की ओर से संगत तरीके से करने का तरीका एचटीएमएल कॉमपिट यूटिलिटी क्लास का उपयोग करना होगा , और बस कॉल करना होगा (0 के साथ यदि आपको किसी विशिष्ट झंडे का उपयोग करने की आवश्यकता नहीं है)
HtmlCompat.from(inputString, 0).toString()
हुड के तहत यह पहले से ही आपके लिए सभी आवश्यक एपीआई जांच करता है
if (Build.VERSION.SDK_INT >= 24) {
return Html.fromHtml(source, flags);
}
return Html.fromHtml(source);
तो इनपुट के लिए
<a href="https://www.stackoverflow.com">Click me!</a>
आपको केवल स्ट्रिंग मिलेगी 'मुझे क्लिक करें!' आउटपुट के रूप में।
Html.fromHtml(String)
एक विस्तारित वर्ग को भी वापस करेंCharSequence
। तो आप इसेCharSequence
बिना मापदंडों के स्वीकार करने के तरीकों के साथ सीधे उपयोग कर सकते हैंtoString()
। महान उत्तर के लिए धन्यवाद Nick :-)