• Codeby web-security - Курс "Тестирование Веб-Приложений на проникновение с нуля" от команды codeby. Общая теория, подготовка рабочего окружения, пассивный фазинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

перекодировка содержимого поля в ХТМЛ-формат

lionk

Well-known member
05.04.2007
310
2
#1
чтобы текст введёный ползователем перекодировался в формат ХТМЛ(тоесть ентеры в поле стали <br>, текст выделеный цветом заключился в тег <font>, выравниванеи опредилилось div-ами), нужно текст написать в RichText поле и єто поле показать на форме.

А вот если хочется генерить содержимое ХТМЛ-страницы скриптом (в преременную толкать значения полей и выводить их через print, или Сomputed поле), то удобства RichText теряются ведь значение поля получается через notesItem.Text, и оно в формате просто текст (слёт другой информации типа картинок и аттачей игнорируем).

Вот мне и интересно возможно ли какимто методом получить текст в формате ХТМЛ, есть ли стандартные функции перекодировки, или хитрые методы?

очень не хочется верить что для решения такой задачи необходимо делать собственный парсер.
 

lionk

Well-known member
05.04.2007
310
2
#3
NotesRichTextStyle.PassThruHTML - это флаг который указывает что содержимое РТ поля чистый ХТМЛ, и его не ненадо перекодировать при отбражении в веб. и как он может помоч в данной задче?
 
L

LotusDnepr

#4
Ааа, все понятно..Ну это уж вряд ли, скорее всего без парсера не обойтись, только зачем собственный ? У Lotus Domino есть замечательный sax-парсер, немножко корректив для обработчика ошибок - и будет без проблем парсить и html
 
S

Sandr

#5
Если в нотес-клиенте пользователь вводит все в РТ поле и Вам в ВЕБе это нужно показать в таком же виде (разны шрифты и т.д), то достаточно на форму для ВЕБа влепить CFD поле со значением вычисляемым из этого РТ поля. Все данные будут отображаться в нормальном виде.. мало того, есоли в РТ поле у вас картинка - то картинка тоже будет отображаться в этом РТ поле...
 
L

LotusDnepr

#6
Если в нотес-клиенте пользователь вводит все в РТ поле и Вам в ВЕБе это нужно показать в таком же виде (разны шрифты и т.д), то достаточно на форму для ВЕБа влепить CFD поле со значением вычисляемым из этого РТ поля. Все данные будут отображаться в нормальном виде.. мало того, есоли в РТ поле у вас картинка - то картинка тоже будет отображаться в этом РТ поле...
Я извиняюсь..А что такое CFD-поле ?
 

lionk

Well-known member
05.04.2007
310
2
#9
не, в том то и дело шо мне нада вывести значения через скрипт...

У Lotus Domino есть замечательный sax-парсер, немножко корректив для обработчика ошибок - и будет без проблем парсить и html
можно по подробнее про этот парсер, чтото я немугу понять куда копать
 
G

Guest

#10
не, в том то и дело шо мне нада вывести значения через скрипт...



можно по подробнее про этот парсер, чтото я немугу понять куда копать
Копать нужно в сторону замечательного лотусного класса NotesSaxParser, в хэлпе все про него написано..Фишка в том, что он, как и всякий нормальный парсер, справляется только с well-formed XML, и чтобы заставить его парсить html, нужно немножко извратиться за счет обработчика ошибок, ну а степень извращения зависит от конкретных условий и желаемого результата
 
S

Sandr

#11
не, в том то и дело шо мне нада вывести значения через скрипт...
Простите, но вывести куда? И как это через скрипт?


Кстати, обратившись к этому CFD полю с помощью javaScript (например к outerHTML поля) вы получите полный HTML сорс этого поля...

ЗЫ: можно вообще РТ поле показывать... есть у него такое свойство display using HTML при Web Access...
 
G

Guest

#12
Насколько я понял, уважаемый lionk собирается скриптом эмулировать ввод пользователем текста, используя в скрипте традиционные уишные операции типа Copy-Past, а потом все это конвертить в html для просмотра в веб...Честно говоря, и сам не понимаю целесообразности этих действий
 

lionk

Well-known member
05.04.2007
310
2
#13
ну при открытии страницы в вебе запускается агент, который переберает содержимое поля, в этом поле есть метки(теги) который этот агент должен подменить на значение определённых полей из других документов.
там есть РТ поля и хочется чтобы выводился отформатированый красивый текст.
тоесть механизма ЦФД поля нехватает.

ну допустим я через NotesSaxParser зделаю правельный XML. а как потом перегнать эго в HTML?
гланды через анус удалять я нехоу :eek:
 
G

Guest

#14
Парсер не предназначен для того, чтобы выводить XML, это прерогатива другого класса - NotesDXLExporter, задача парсера - работа с уже готовым XML. В общем смысл уловил..Значит, страница закачивается из веба через ретривер и есть notesdocument с данными Domino, нужно только перенести его содержимое в RTF, подменив некоторые теги, так ? Если так, могу дать наводку
 

lionk

Well-known member
05.04.2007
310
2
#15
Программер
не совсем, или совсем не так :eek:
(упрощяю)
есть РТ поле которое нужно вывести в вебе, его можно вывести только скриптом присвоив зачение этого поля другому полю, которое находится на веб форме что открывается. нужно чтобы значение РТ поля выводилось в формате ХТМЛ(тоесть ентеры заменены тегами <br>).
понятно что при простом присвоении (ctxdoc.outfield=rtitem.text) этого не произойёт. значит нужно зделать перекодировку(замену). чтото типа (ctxdoc.outfield=CONV_FUNC(rtitem.text) ), вопрос какой код забить в эту функцию?

как я понял есть два пути либо самому разбирать содержимое РТ поля и както пересобрать строку, либо использовать NotesSaxParser, получив из РТ поля XML, но для меня остаётся загадкой как этот XML вывести на страницу в удобном для пользователей виде.
 
G

Guest

#16
Ну дак это ж проще пареной репы, здесь и парсить-то и нечего ). Вот:

Sub Click(Source As Button)
Dim NUIWS As New NotesUIWorkspace
Set ND=NUIWS.CurrentDocument.Document
Set NRTI=ND.GetFirstItem("BODY") 'ваше поле с тестом юзера
TextStr$=NRTI.Values
StrArray=Split(TextStr$,Chr(13))
For i%=1 To Ubound(StrArray)
StrArray(i%)="<br>"+Strright(StrArray(i%),Left(StrArray(i%),1))
Next
HTMLStr$=Implode(StrArray)
End Sub

Концепция такова - берете текст из RTF, расчленяете его на массив стрингов, разделенных знаком переноса строки, и подменяете знак перноса (Chr(13)) на символ "<br>", потом собираете строку заново и имеете готовый html-текст, который можно поместить в другой RTF
 

lionk

Well-known member
05.04.2007
310
2
#17
а управление цветом текста, выравниванием, кегелем и гарнитурой шрифта(arial, tahoma)?
с <br> єто самый простой вариант, неужели нет какойто незадокументированой функции :eek:, эх меты... мечты.
 
G

Guest

#18
Есть такая идея - копировать текст поля в вордовский OLE, а уж там в посимвольном цикле определять форматирование каждого элемента, пользуясь вордовским Visual Basic и превращать в HTML, занятие в общем довольно хлопотное, но иного пути пока не предвижу )
 
S

Sandr

#19
эх.. попросить надо бы админов, шоб смайлик "застрелите меня" добавили...
 
Вверх Снизу