Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 html в text  [new]
alsov
Member

Откуда: Санкт-Петербург
Сообщений: 153
Приветствую!

Подскажите функцию форматирования html в обычный текст. То есть нужно убрать все теги, либо поменять на соответствующие символы.

Обычный replace с перечислением всех тегов как-то некрасиво.
Поиск по HTMLToText ничего не дал.
Должна же быть стандартная функция?

Заранее спасибо.
31 янв 08, 13:22    [5226777]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
slow brain
Member

Откуда:
Сообщений: 336
Если версия >=10 то можно использовать регулярные выржения (regexp_replace, ...)
31 янв 08, 13:46    [5226966]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862

alsov wrote:

> Подскажите функцию форматирования html в обычный текст. То есть нужно
> убрать все теги, либо поменять на соответствующие символы.
>
> Обычный replace с перечислением всех тегов как-то некрасиво.
> Поиск по HTMLToText ничего не дал.
> Должна же быть стандартная функция?
>

Может посмотреть в сторону Oracle Context, особенно на процедуры типа ctx_doc.markup(),
ctx_doc.policy_markup() (в 10-ке)? Они ищут в том числе и по html, имеют параметр plaintext, т.е.
формат вывода результата. Если задать заранее несуществующий шаблон поиска, то м.б. они возвратят
просто документ?

Posted via ActualForum NNTP Server 1.4

31 янв 08, 14:39    [5227496]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
cone
Member

Откуда: СПб
Сообщений: 44
В 10-ке можно
ctx_doc.filter либо ctx_doc.policy_filter
31 янв 08, 15:08    [5227774]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
alsov
Member

Откуда: Санкт-Петербург
Сообщений: 153
Если версия >=10 то можно использовать регулярные выржения (regexp_replace, ...)


Тут все равно придется все возможные теги перечислять. Или я ошибаюсь?

Может посмотреть в сторону Oracle Context, особенно на процедуры типа ctx_doc.markup(),
ctx_doc.policy_markup() (в 10-ке)? Они ищут в том числе и по html, имеют параметр plaintext, т.е.
формат вывода результата. Если задать заранее несуществующий шаблон поиска, то м.б. они возвратят просто документ?


В 10-ке можно ctx_doc.filter либо ctx_doc.policy_filter


А можно простейший пример. Просто никогда с Oracle Text не работал.
И не придется ли при таком варианте хранить текст в таблице?
Нужно чтобы отдал varchar2 и в результате varchar2 но без тегов.
Текст меньше 2000 символов.
31 янв 08, 15:19    [5227879]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
slow brain
Member

Откуда:
Сообщений: 336
>>Если версия >=10 то можно использовать регулярные выржения (regexp_replace, ...)
>Тут все равно придется все возможные теги перечислять. Или я ошибаюсь?
Если учесть, что все теги начинаются с "<", а заканчиваются ">" то перечислять ничего не надо

select regexp_replace ('<body><b>Some html text</b></body>', '<[^>]*>') from dual
PS: 10 под рукой нету
31 янв 08, 15:54    [5228188]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
alsov
Member

Откуда: Санкт-Петербург
Сообщений: 153
slow brain
Если учесть, что все теги начинаются с "<", а заканчиваются ">" то перечислять ничего не надо

select regexp_replace ('<body><b>Some html text</b></body>', '<[^>]*>') from dual
PS: 10 под рукой нету


Спасибо, подошло
31 янв 08, 16:09    [5228307]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
alsov
Member

Откуда: Санкт-Петербург
Сообщений: 153
Хотя нет
Есть же еще теги типа & q u o t & l t

и так далее
их бы тоже стоило заменить
31 янв 08, 16:16    [5228375]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
alsov
Member

Откуда: Санкт-Петербург
Сообщений: 153
вобщем вот такая функция получилась
может кому пригодиться

CREATE OR REPLACE FUNCTION HTMLToText(HTML IN Varchar2) RETURN VARCHAR2
AS
  l_tmp VARCHAR2(2000);
BEGIN
  l_tmp := REPLACE(html, chr(38)||'#13;', '<br>');
  l_tmp := REPLACE(l_tmp, chr(38)||'#10;', '');

  l_tmp := REPLACE(l_tmp, '<br>', chr(13)||chr(10));
  l_tmp := REPLACE(l_tmp, '<p>', chr(13)||chr(10));
  l_tmp := REPLACE(l_tmp, '</p>', chr(13)||chr(10));
  l_tmp := REPLACE(l_tmp, '<li>', chr(13)||chr(10));
  l_tmp := REPLACE(l_tmp, '<table>', chr(13)||chr(10));
  l_tmp := REPLACE(l_tmp, '<tr>', chr(13)||chr(10));
  l_tmp := REPLACE(l_tmp, '<td>', chr(13)||chr(10));
  l_tmp := REPLACE(l_tmp, '</table>', chr(13)||chr(10));

  l_tmp := REPLACE(l_tmp, chr(38)||'nbsp;', ' ');
  l_tmp := REPLACE(l_tmp, chr(38)||'quot;', '"');
  l_tmp := REPLACE(l_tmp, chr(38)||'amp;', '&');
  l_tmp := REPLACE(l_tmp, chr(38)||'lt;', '<');
  l_tmp := REPLACE(l_tmp, chr(38)||'gt;', '>');
  
  l_tmp := regexp_replace (l_tmp, '<[^>]*>');
  RETURN l_tmp;
END;
/

31 янв 08, 16:40    [5228599]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
strip HTML tags from fields?

Re: Rich Text formatted data

SQL> set serverout on define off
SQL> begin
  2   ctx_ddl.create_preference('test_inso_filter', 'INSO_FILTER');
  3   ctx_ddl.create_policy( 'test_policy', 'test_inso_filter' );
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL> declare
  2    document varchar2(2000) := '<body><b>&q u o t;Some html text&q u o t;</b></body>';
  3    restab   clob;
  4  begin
  5    ctx_doc.policy_filter(
  6        policy_name => 'test_policy'
  7      , document    => document
  8      , restab      => restab
  9      , plaintext   => true
 10    );
 11    dbms_output.put_line(restab);
 12  end;
 13  /


"Some html text"
/
Только в выделенной строке я руками пробелы вставил.
31 янв 08, 16:42    [5228617]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
cone
Member

Откуда: СПб
Сообщений: 44
Denis Popov

SQL> set serverout on define off
SQL> begin
  2   ctx_ddl.create_preference('test_inso_filter', 'INSO_FILTER');
  3   ctx_ddl.create_policy( 'test_policy', 'test_inso_filter' );
  4  end;
  5  /


Видимо, вместо INSO_FILTER лучше использовать AUTO_FILTER

With Oracle Text 10g Release 2, the INSO_FILTER filter has been deprecated in
favor of a new filter, AUTO_FILTER. AUTO_FILTER is backward-compatible with
INSO_FILTER.
31 янв 08, 18:00    [5229173]     Ответить | Цитировать Сообщить модератору
 Re: html в text  [new]
alsov
Member

Откуда: Санкт-Петербург
Сообщений: 153
Спасибо

Буду знать что есть и такое решение, но к сожалению не всегда есть права на пакеты ctx_ddl и ctx_doc :(
31 янв 08, 18:38    [5229349]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: html в text  [new]
builder
Guest
Саш, имхо есть простое решение: заменить к фигам все теги <*> и </*> на пустоту. Процедурка замены такой радости вполне очевидна.
8 июн 09, 00:08    [7274666]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить