![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день. Есть два варианта функции (удаляет теги и текст между тегами)
Вариант1 Код:
function DelJS(const Code:string):string;
var
Buffer:string;
StartTeg:integer;
EndTeg:integer;
i:integer;
begin
Buffer:=Code;
repeat
try
StartTeg:=Pos('<script', Buffer);
EndTeg:=Pos('</script>', Buffer);
Delete(Buffer, StartTeg, EndTeg-StartTeg+9);
i:=Pos('<script', Buffer);
except
break
end;
until i = 0;
Result:=Buffer;
end;Вариант2 Код:
function DelJS(const Code:string):string;
var
EndTeg:string;
Buffer:string;
index1:integer;
index2:integer;
i:integer;
begin
EndTeg:='</script>';
Buffer:=Code;
index1:=Pos('<script', Buffer);
while (index1 <> 0) do
begin
index2 := index1;
i := 1;
while i <> 10 do
begin
try
Inc(index2);
if Buffer[index2] = EndTeg[i] then
Inc(i)
else
i := 1;
except
break
end;
end;
Delete(Buffer, index1, index2 - index1 + 1);
index1 := Pos('<script', Buffer);
end;
Result := Buffer;
end;Оба варианта работают в общем одинаково, удаляют что назначено, грузят проц на большом файле и все такое ВНИМАНИЕ!!! Вопросы: 1. какой вариант более соотвествует классическому стилю программирования, более правильный? 2. может есть недостатки? кто знает, напишите, пожалуйста |
|
#2
|
|||
|
|||
|
поидее если есть код тестов, которые оба они проходят то тот который короче или проще,
а если в общем, то первый зависает если найдёт закрывающий тэг до открывающего, ещё бывает js в событиях всяких onevent можно ещё сделать посимвольно: Код:
function here(substr,instr:string; atpos:integer):boolean;
var i:integer;
begin
result := false;
if length(instr) < atpos+length(substr)-1 then exit; //на всякий
for i := 1 to length(substr) do
if instr[atpos+i - 1] <> substr[i] then exit;
result := true;
end;
function hereAtleft(substr,instr:string; atpos:integer):boolean;
begin
result := here(substr,instr,atpos - length(substr));
end;
function DelJS(const inCode:string):string;
const OPENTAG = '<script'; CLOSETAG = '</script>';
var i:integer; script:boolean;
begin
result := '';
script := false;
for i := 1 to length(incode) do begin
if here(OPENTAG,incode,i) then script := true
else if hereAtleft(CLOSETAG,incode,i) then script := false;
if not script then result := result + incode[i];
end
end;
{
кстати из <<script></script>script>123</script> делает <script>123</script>
поэтому для удовлетворения паранои можно ещё в цикле запускать
}Последний раз редактировалось Pyro, 07.12.2012 в 09:14. |
| Этот пользователь сказал Спасибо Pyro за это полезное сообщение: | ||
Pcrepair (07.12.2012)
| ||
|
#3
|
|||
|
|||
|
Спасибо за пример, попробую
|