Блог о программировании, электронике и рыбалке

Удаление HTML тегов в Delphi

удаление HTML тегов в Delphi В своем новом проекте застрял на удалении HTML тегов из переменной. За час удалось найти в интернете готовую функцию, которую я немного доработал и делюсь с вами.

 

 

 

function delhtmlteg(str:string):string;
var
i:Dword;
s:string;
start:boolean;
begin   if str='' then exit;   start:=false;   while (pos('<style',str)>0)or(pos('<script',str)>0) do
begin
if pos('<style',str)>0 then Delete(str,pos('<style',str),posEx('</style>',str,pos('<style',str))+8-pos('<style',str));
if pos('<script',str)>0 then Delete(str,pos('<script',str),posEx('</script>',str,pos('<script',str))+8-pos('<script',str));
end;

    for i:=0 to length(str)do
begin
if(str[i]='>')then
begin
start:=false; Continue;
end;
if (str[i]='<')or(start) then
begin
start:=true; Continue;
end;
if (str[i]<>#0) and (str[i]<>#13)then s:=s+str[i];
end;
result:=s;
end;

Присоединяйтесь к нашей группе в Telegram @GeekElectronics
  • keyboard_arrow_downУдаление HTML тегов в Delphi
    • Автор:
    • Миниатюра: Удаление HTML тегов в Delphi
    • Рубрика: Delphi в примерах
    • Обновлено: 08.03.2018
    • Комментариев: 7
    • Просмотров: 1 988
  • Оцените пожалуйста статью
    1 Star2 Stars3 Stars4 Stars5 Stars
    Загрузка...
  • Поделитесь с друзьями
Geek Electronics

Комментариев: 7

  • Avatar for source
    Waik:

    Реально работает. Особенно после обработки напильником (в плане удаления символов типа  )

    • Avatar for source
      Waik:

      стерли концовку - имелось ввиду &_nbsp_; без подчеркиваний

    • Avatar for source
      Waik:

      :) с кодом все в порядке было. Сорри за невнятность. В моем HTML файле есть масса специальных символов. Например неразрывный пробел, copyright, знаки больше меньше... Последние чтобы не совпадать с обрамлением тегов кодируются & # 060; Вот их потом тоже приходится либо вообще вырезать либо заменять на настоящие символы "", пробелы заменять на просто пробелы и т.д. Но это уже мои заморочки. Короче говоря - утащил к себе ваш код. Спасибо.

  • Avatar for source
    Стертор:

    Функция хорошая, большое спасибо. Но позвольте немного покритиковать: зачем так злоупотреблять pos/posex, если можно 1 раз вызвать ее и в дальнейшем использовать полученное значение?
    [code]
    if pos('0 then Delete(str,pos('<style',str),posEx('',str,pos('<style',str))+8-pos('', [rfReplaceAll]);
    StringReplace(Result, '<', '<', [rfReplaceAll]);
    StringReplace(Result, '&', '&', [rfReplaceAll]);
    StringReplace(Result, ' ', ' ', [rfReplaceAll]);
    StringReplace(Result, '"', '"', [rfReplaceAll]);
    StringReplace(Result, '©', #169, [rfReplaceAll]);
    end;[/code]

  • Avatar for source
    Стертор:

    [code]function HTMLReplaceSpecials(Str: string): string;
    begin
    Result := Str;
    StringReplace(Result, '>', '>', [rfReplaceAll]);
    StringReplace(Result, '<', '<', [rfReplaceAll]);
    StringReplace(Result, '&', '&', [rfReplaceAll]);
    StringReplace(Result, ' ', ' ', [rfReplaceAll]);
    StringReplace(Result, '"', '"', [rfReplaceAll]);
    StringReplace(Result, '©', #169, [rfReplaceAll]);
    end;[/code]

Добавить комментарий

arrow_upward