ИзвлечьТекстИзHTML (БСП)

Автор: 1С
ОбщийМодуль.СтроковыеФункцииКлиентСервер
БСП

Извлечь текст из html. Очищает текст в формате HTML от тегов и возвращает неформатированный текст.

// Очищает текст в формате HTML от тегов и возвращает неформатированный текст. 
//
// Параметры:
//  ИсходныйТекст - Строка - текст в формате HTML.
//
// Возвращаемое значение:
//  Строка - текст, очищенный от тегов, скриптов и заголовков.
//
Функция ИзвлечьТекстИзHTML(Знач ИсходныйТекст) Экспорт
	Результат = "";
	
	Текст = НРег(ИсходныйТекст);
	
	// отрезаем все что не body
	Позиция = СтрНайти(Текст, "<body");
	Если Позиция > 0 Тогда
		Текст = Сред(Текст, Позиция + 5);
		ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 5);
		Позиция = СтрНайти(Текст, ">");
		Если Позиция > 0 Тогда
			Текст = Сред(Текст, Позиция + 1);
			ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1);
		КонецЕсли;
	КонецЕсли;
	
	Позиция = СтрНайти(Текст, "</body>");
	Если Позиция > 0 Тогда
		Текст = Лев(Текст, Позиция - 1);
		ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1);
	КонецЕсли;
	
	// вырезаем скрипты
	Позиция = СтрНайти(Текст, "<script");
	Пока Позиция > 0 Цикл
		ПозицияЗакрывающегоТега = СтрНайти(Текст, "</script>");
		Если ПозицияЗакрывающегоТега = 0 Тогда
			// Не найден закрывающий тег - вырезаем оставшийся текст.
			ПозицияЗакрывающегоТега = СтрДлина(Текст);
		КонецЕсли;
		Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 9);
		ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 9);
		Позиция = СтрНайти(Текст, "<script");
	КонецЦикла;
	
	// вырезаем стили
	Позиция = СтрНайти(Текст, "<style");
	Пока Позиция > 0 Цикл
		ПозицияЗакрывающегоТега = СтрНайти(Текст, "</style>");
		Если ПозицияЗакрывающегоТега = 0 Тогда
			// Не найден закрывающий тег - вырезаем оставшийся текст.
			ПозицияЗакрывающегоТега = СтрДлина(Текст);
		КонецЕсли;
		Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 8);
		ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 8);
		Позиция = СтрНайти(Текст, "<style");
	КонецЦикла;
	
	// вырезаем все теги	
	Позиция = СтрНайти(Текст, "<");
	Пока Позиция > 0 Цикл
		Результат = Результат + Лев(ИсходныйТекст, Позиция-1);
		Текст = Сред(Текст, Позиция + 1);
		ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1);
		Позиция = СтрНайти(Текст, ">");
		Если Позиция > 0 Тогда
			Текст = Сред(Текст, Позиция + 1);
			ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1);
		КонецЕсли;
		Позиция = СтрНайти(Текст, "<");
	КонецЦикла;
	Результат = Результат + ИсходныйТекст;
	МассивСтрок = РазложитьСтрокуВМассивПодстрок(Результат, Символы.ПС, Истина, Истина);
	Возврат СокрЛП(СтрСоединить(МассивСтрок, Символы.ПС));
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ИзвлечьТекстИзФайлаНаДиске (БСП)

ИзвлечьТекстOpenDocument (БСП)

ИзвлечьТекстИзФайлов (БСП)

ИзвлечьТекстИзТекстовогоФайла (БСП)

ИзвлечьТекстИзФайловНаСервере (БСП)

ИзвлечьТекст (БСП)

ИзвлечьТекстВерсии (БСП)

ТекстЗапросаДляИзвлеченияТекста (БСП)

ИзвлечьСообщениеБлокировки (БСП)

1С Менеджер конфигураций