PHP にはstrip_tags
、文字列から HTML および PHP タグを削除する機能があります。
Androidにはhtmlをエスケープする方法がありますか?
PHP にはstrip_tags
、文字列から HTML および PHP タグを削除する機能があります。
Androidにはhtmlをエスケープする方法がありますか?
@sparkymatによってリンクされた回答のソリューションには、通常、正規表現(エラーが発生しやすいアプローチ)または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
これは、Androidに組み込まれているHtmlパーサーを使用して、htmlタグなしで入力htmlの表現を構築します。次に、出力を文字列に変換して戻すことにより、「スパン」マークアップが削除されます。
ここで説明するように、Html.fromHtmlの動作はAndroid N以降変更されています。詳細については、ドキュメントを参照してください。
投稿が遅れて申し訳ありませんが、これは他の人にとって役立つと思います。
HTMLストリップのみを削除するには
Html.fromHtml(htmltext).toString()
この方法では、html タグは文字列に置き換えられますが、文字列は適切にフォーマットされません。したがって、私はしました
Html.fromHtml(htmltext).toString().replaceAll("\n", "").trim()
このようにして、最初に nextline を空白に置き換え、空白を削除しました。同様に、他のユーザーを削除できます。
Html.escapeHtml(String)
API 16 以降をターゲットにしている場合は、代わりに使用できます。
API 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);
}
}
}
}
私は正常に動作するこのクラスを使用しています。
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());