Как получить текст из html? Один мой хороший клиент использует встроенный в 1С почтовый клиент.
До этого все работало хорошо, но недавно из-за установки нового банк-клиента на компьютере обновили Internet Explorer до 11 версии - стала появляться ошибка:
Поле объекта не обнаружено innerText
Пришлось немного доработать типовую функцию получения текста из html:
Код 1C v 8.х Функция ПреобразоватьТекстИзХТМЛФорматаВПростой(ТекстВФорматеХТМЛ) Экспорт
Попытка
НовыйHTMLДокумент = Новый COMОбъект("HtmlFile");
НовыйHTMLДокумент.open("text/html");
НовыйHTMLДокумент.write(ТекстВФорматеХТМЛ);
НовыйHTMLДокумент.close();
Возврат СтрЗаменить(НовыйHTMLДокумент.all.item(0).innerText, Символ(13), "");
Исключение
Построитель = Новый ПостроительDOM;
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(ТекстВФорматеХТМЛ);
ДокументHTML = Построитель.Прочитать(ЧтениеHTML);
Возврат СокрЛП(ДокументHTML.Тело.ТекстовоеСодержимое);
КонецПопытки;
КонецФункции
еще функции пример получения:
Код 1C v 8.х // Процедура изменяет признак формат текста письма (Текст, HТМЛ),
// и при этом конвертирует сам текст.
//
// Параметры:
// ЭУHTML,ЭУТекст - Элементы управления формы, соответственно поле HTML и поле Текст
// Кнопка - выбранная кнопка ее текст "Простой текст" или "HTML" новый вид текста письма
// либо текст кнопки если пометку кнопки менять не требуется, соответственно
// вопрос о потере форматирования задаваться не будет
// Возвращаемое значение:
// Булево, признак выполнения изменения формата
//
Функция удИзменитьФорматТекста(ЭУHTML,ЭУТекст, Кнопка) Экспорт
Если ТипЗнч(Кнопка) = Тип("Строка") Тогда
НовыйВидТекстаПисьма = Кнопка;
ЕстьКнопка = Ложь;
Иначе
Если Кнопка.Пометка Тогда
Возврат Ложь;
КонецЕсли;
НовыйВидТекстаПисьма = Кнопка.Текст;
ЕстьКнопка = Истина;
КонецЕсли;
Если Найти(НовыйВидТекстаПисьма,"Простой текст") > 0 Тогда
ИсходныйТекст = ЭУHTML.ПолучитьТекст();
НачалоBODY = Найти(ИсходныйТекст, "<BODY>");
КонецBODY = Найти(ИсходныйТекст, "</BODY>");
Если ЕстьКнопка и (НачалоBODY > 0 И КонецBODY > 0 И (НачалоBODY + 6) < КонецBODY) Тогда
СтрокаВопроса = "Будет потеряно форматирование текста. Продолжить?";
ОтветНаВопрос = Вопрос(СтрокаВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
Если ОтветНаВопрос <> КодВозвратаДиалога.Да Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
ФорматТекста = ЭУHTML.Документ.all.item(0).innerText;
ЭУТекст.Значение = СтрЗаменить(ФорматТекста, Символ(13), "");
ЭУТекст.Видимость = Истина;
ЭУHTML.Видимость = Ложь;
ЭУHTML.УстановитьТекст("");
Иначе
ФорматХТМЛ = СтрЗаменить(ЭУТекст.Значение, Символы.ПС, "<BR>");
ЭУHTML.УстановитьТекст(ФорматХТМЛ);
ЭУHTML.Видимость = Истина;
ЭУТекст.Видимость = Ложь;
КонецЕсли;
Если ЕстьКнопка Тогда
Кнопка.Пометка = Истина;
КонецЕсли;
Возврат Истина;
КонецФункции // обИзменитьФорматТекста()
Категория:
Работа с Интернет, Почтой (Mail), FTP Функция очищает текст в формате HTML от тегов и возвращает неформатированный текст Работая с html данными, бывает необходимо получить только чистый текст, исключив все теги и скрипты.
Ниже приведена универсальная функция, оставляющая только текст:
Код 1C v 8.х // Очищает текст в формате HTML от тегов и возвращает неформатированный текст.
Функция ИзвлечьТекстИзHTML(Знач ИсходныйТекст) Экспорт
Результат = "";
Текст = НРег(ИсходныйТекст);
// отрезаем всё что не body
Позиция = Найти(Текст, "<body");
Если Позиция > 0 Тогда
Текст = Сред(Текст, Позиция + 5);
ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 5);
Позиция = Найти(Текст, ">");
Если Позиция > 0 Тогда
Текст = Сред(Текст, Позиция + 1);
ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1);
КонецЕсли;
КонецЕсли;
Позиция = Найти(Текст, "</body>");
Если Позиция > 0 Тогда
Текст = Лев(Текст, Позиция - 1);
ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1);
КонецЕсли;
// вырезаем скрипты
Позиция = Найти(Текст, "<script");
Пока Позиция > 0 Цикл
ПозицияЗакрывающегоТега = Найти(Текст, "</script>");
Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 9);
ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 9);
Позиция = Найти(Текст, "<script");
КонецЦикла;
// вырезаем все теги
Позиция = Найти(Текст, "<");
Пока Позиция > 0 Цикл
Результат = Результат + Лев(ИсходныйТекст, Позиция-1);
Текст = Сред(Текст, Позиция + 1);
ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1);
Позиция = Найти(Текст, ">");
Если Позиция > 0 Тогда
Текст = Сред(Текст, Позиция + 1);
ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1);
КонецЕсли;
Позиция = Найти(Текст, "<");
КонецЦикла;
Результат = Результат + ИсходныйТекст;
Возврат СокрЛП(Результат);
КонецФункции
Категория:
Работа с Текстом (Строкой) Функция получить строку на латинском, Транслит Код 1C v 8.х Функция Транслит(Вход)
Коды = Новый Соответствие;
Коды.Вставить("ё","yo");
Коды.Вставить("Ё","Yo");
Нач = КодСимвола("А");
Англ = "A" "B" "V" "G" "D" "E" "Zh" "Z" "I" "Y" "K" "L" "M" "N" "O" "P" "R" "S" "T" "U" "F" "Kh" "Ts" "Ch" "Sh" "Shch" "" "Y" "" "E" "Yu" "Ya" "a" "b" "v" "g" "d" "e" "zh" "z" "i" "y" "k" "l" "m" "n" "o" "p" "r" "s" "t" "u" "f" "kh" "ts" "ch" "sh" "shch" "" "y" "" "e" "yu" "ya";
Для К = Нач по КодСимвола("я") Цикл
Коды.Вставить(Символ(К), СтрПолучитьСтроку(Англ, К - Нач + 1));
КонецЦикла;
Выход = "";
Для К=1 по СтрДлина(Вход) Цикл
Бкв = Сред(Вход,К,1);
Зн = Коды.Получить(Бкв);
Выход = Выход + ?(Зн = Неопределено, Бкв, Зн);
КонецЦикла;
Возврат Выход;
КонецФункции
//еще пример функции, возвращает значение в верхнем регистре
Код 1C v 8.х Функция ПолучитьСтрокуНаЛатинском(ИсходныйТекст)
СоответствиеСимволов = Новый Соответствие;
СоответствиеСимволов.Вставить("А", "A");
СоответствиеСимволов.Вставить("Б", "B");
СоответствиеСимволов.Вставить("В", "V");
СоответствиеСимволов.Вставить("Г", "G");
СоответствиеСимволов.Вставить("Д", "D");
СоответствиеСимволов.Вставить("Е", "E");
СоответствиеСимволов.Вставить("Ё", "E");
СоответствиеСимволов.Вставить("Ж", "ZH");
СоответствиеСимволов.Вставить("З", "Z");
СоответствиеСимволов.Вставить("И", "I");
СоответствиеСимволов.Вставить("Й", "Y");
СоответствиеСимволов.Вставить("К", "K");
СоответствиеСимволов.Вставить("Л", "L");
СоответствиеСимволов.Вставить("М", "M");
СоответствиеСимволов.Вставить("Н", "N");
СоответствиеСимволов.Вставить("О", "O");
СоответствиеСимволов.Вставить("П", "P");
СоответствиеСимволов.Вставить("Р", "R");
СоответствиеСимволов.Вставить("С", "S");
СоответствиеСимволов.Вставить("Т", "T");
СоответствиеСимволов.Вставить("У", "U");
СоответствиеСимволов.Вставить("Ф", "F");
СоответствиеСимволов.Вставить("Х", "KH");
СоответствиеСимволов.Вставить("Ц", "TS");
СоответствиеСимволов.Вставить("Ч", "CH");
СоответствиеСимволов.Вставить("Ш", "SH");
СоответствиеСимволов.Вставить("Щ", "SHCH");
СоответствиеСимволов.Вставить("Ъ", "");
СоответствиеСимволов.Вставить("Ы", "Y");
СоответствиеСимволов.Вставить("Ь", "");
СоответствиеСимволов.Вставить("Э", "E");
СоответствиеСимволов.Вставить("Ю", "YU");
СоответствиеСимволов.Вставить("Я", "YA");
ИсходныйТекст = СокрЛП(ВРег(ИсходныйТекст));
ГотовоеЗначение = "";
ТекущийСимвол = "";
ТекущийГотовыйСимвол = "";
Для к = 1 по СтрДлина(ИсходныйТекст) Цикл
ТекущийСимвол = Сред(ИсходныйТекст, к, 1);
ТекущийГотовыйСимвол = СоответствиеСимволов.Получить(ТекущийСимвол);
Если ТекущийГотовыйСимвол = Неопределено Тогда
ГотовоеЗначение = ГотовоеЗначение + ТекущийСимвол;
Иначе
ГотовоеЗначение = ГотовоеЗначение + ТекущийГотовыйСимвол;
КонецЕсли;
КонецЦикла;
Возврат ГотовоеЗначение;
КонецФункции
//Использование:
Сообщить(ПолучитьСтрокуНаЛатинском("Забарчук Юлия"));
//Выведет: ZABARCHUK YULIYA
Категория:
Работа с Текстом (Строкой)