GeekElectronics

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

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

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

удаление тег HTML Delphi  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;

logo

7
  • Waik:

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

    • Waik:

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

  • source™:

    перепостил код
    сейчас он не подпорчен

    • Waik:

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

  • Стертор:

    Функция хорошая, большое спасибо. Но позвольте немного покритиковать: зачем так злоупотреблять 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]

  • Стертор:

    [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]

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

Яндекс.Метрика