В своем новом проекте застрял на удалении 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;
Реально работает. Особенно после обработки напильником (в плане удаления символов типа )
стерли концовку - имелось ввиду &_nbsp_; без подчеркиваний
перепостил код
сейчас он не подпорчен
:) с кодом все в порядке было. Сорри за невнятность. В моем 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]