Как получить текст из 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.х
Функция удИзменитьФорматТекста(ЭУ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(Знач ИсходныйТекст) Экспорт
Результат = "" ;
Текст = НРег( ИсходныйТекст) ;
Позиция = Найти( Текст, "<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 ) ;
ТекущийГотовыйСимвол = СоответствиеСимволов. Получить( ТекущийСимвол) ;
Если ТекущийГотовыйСимвол = Неопределено Тогда
ГотовоеЗначение = ГотовоеЗначение + ТекущийСимвол;
Иначе
ГотовоеЗначение = ГотовоеЗначение + ТекущийГотовыйСимвол;
КонецЕсли ;
КонецЦикла ;
Возврат ГотовоеЗначение;
КонецФункции
Сообщить( ПолучитьСтрокуНаЛатинском( "Забарчук Юлия" ) ) ;
Категория:
Работа с Текстом (Строкой)