Как удалить или избежать html-тегов в Android



в PHP strip_tags функция, которая удаляет HTML и PHP теги из строки.



действительно Андроид иметь пути к отступлению в HTML?

376   7  

7 ответов:

решения в ответе, связанные с @sparkymat, как правило, требуют либо регулярного выражения, что является подверженным ошибкам подходом , либо установки сторонней библиотеки, такой как jsoup или Иерихон. Лучшее решение на устройствах 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);
    } else {
       return Html.fromHtml(html);
    }
}

Это использует встроенный в Html парсер Android, чтобы построить Spanned представление входного 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("&lt;");
            } else if (c == '>') {
                out.append("&gt;");
            } else if (c == '&') {
                out.append("&amp;");
            } 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("&nbsp;");
                    i++;
                }

                out.append(' ');
            } else {
                out.append(c);
            }
        }
    }
}

Я использую этот класс, который работает нормально.

Это для новой альтернативы метода (API 16+):

android.text.Html.escapeHtml(your_html).toString();
 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());

это мертво просто с jsoup

public static String html2text(String html) {
   return Jsoup.parse(html).text();
}

Html.fromHtml может быть очень медленным для больших строк html.

вот как вы можете сделать это, легко и быстро с jsoup:

добавьте эту строку в файл gradle:

implementation 'org.jsoup:jsoup:1.11.3'

проверьте, что такое последняя версия jsoup здесь: https://jsoup.org/download

добавьте эту строку в свой код:

String text = Jsoup.parse(htmlStr).text();

проверьте эту ссылку здесь, чтобы узнать, как сохранить разрывы строк:

как сохранить разрывы строк при использовании jsoup для преобразования html в обычный текст?

Comments

    Ничего не найдено.