удалить HTML-теги с помощью StringTokenizer - PullRequest
0 голосов
/ 03 марта 2012

Вот моя строка:

String str = "<pre><font size="5"><strong><u>LVI . The Day of Battle</u></strong></font>        
<font
size="4"><strong>";

Я хочу удалить все html-теги в строке с помощью StringTokenizer.Но я не понимаю, как использовать StringTokenizer для этой ситуации.Потому что, когда я использую str.replaceAll("\\<.*?>",""), удалить все теги неэффективно, потому что некоторые теги будут находиться на следующей строке, как показано выше.Но я хочу сделать это для всех ситуаций между < и >.Как мне это сделать?(Я хочу добиться этого используя StringTokenizer).Спасибо ..

Ответы [ 3 ]

2 голосов
/ 03 марта 2012

Как правило, вы не должны анализировать HTML ни с чем, кроме библиотеки синтаксического анализа HTML.Написание собственного синтаксического анализатора создает угрозу безопасности и подвергает ваши приложения возможным направлениям атак, таким как межсайтовый скриптинг и другие ошибки.Опять же: не разбирайте HTML с помощью регулярных выражений или простого токенизатора.Исключением из этого правила может быть, если у вас есть небольшой набор известных входных данных HTML, и вы будете использовать свой код только с этими данными .В этом сценарии вы можете и должны проверить, что ваш код работает правильно для каждого ввода.

Тем не менее, ваше исходное регулярное выражение очень близко.Подстановочный знак «точка» соответствует всему, кроме символов новой строки, поэтому, если мы добавим к вашему регулярному выражению возможность перевода строки в дополнение к символу «точка», мы получим положительные результаты для вашей тестовой строки.

String result = str.replaceAll("<(.|\r|\n|\f)*?>","");

НЕИСПОЛЬЗУЙТЕ ЭТОТ КОД НА НЕИЗВЕСТНОМ ВВОДЕ!НЕ ИСПОЛЬЗУЙТЕ ЕГО В ПРОИЗВОДСТВЕ!ЭТО НЕ БЕЗОПАСНЫЙ ИЛИ ПРАВИЛЬНЫЙ ПОДХОД К ПАРСИНГУ HTML.

1 голос
/ 03 марта 2012

Попытка обработать HTML с помощью регулярных выражений или StringTokenizer сама по себе ... болезненна.

Этот ответ является обязательным чтением, прежде чем идти дальше.

ЕслиВаши HTML-файлы просты, вы могли бы убрать удаление новых строк, затем применить регулярное выражение, затем переформатировать HTML - или попробовать многострочные регулярные выражения.

Но вы действительно должны рассмотреть использованиеправильный HTML-парсер.См. этот вопрос (и, вероятно, многие другие ...)

0 голосов
/ 03 марта 2012

Лучше использовать библиотеку HTML-анализатора вместо StringTokenizer.Пожалуйста, посмотрите на приведенную ниже демонстрацию:

  1. Загрузите базовую библиотеку jsoup-1.6.1.jar из http://jsoup.org/download.
  2. Добавьте эту библиотеку в ваш путь к классам.
  3. Играйте со своим HTML, как вам нравится.Ниже приведен пример для преобразования содержимого HTML в текстовый формат:

    import org.jsoup.Jsoup;

    открытый класс HtmlParser {

    public static String removeAllHtml(String htmlContent) {
        return Jsoup.parse(htmlContent).text();
    }
    
    public static void main(String[] args) {
        String htmlContent = "<pre><font size=\"5\"><strong><u>LVI . The Day of Battle</u></strong></font><fontsize=\"4\"><strong>";
        System.out.println(removeAllHtml(htmlContent));
    }
    

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...