Ist nicht so einfach, da es in
HTML auch die möglichkeit gibt, in vorigen Ordnerstrukturen zu suchen, also sowas wie:
"../../../"...
Und das ist selten leicht im Code zu filtern
Sollte eigentlich nichts machen:
http://www.delphipraxis.net/members/..
Wobei der Browser das anscheinend schon direkt auflöst...
Aber so einen Pfad clientseitig zu normalisieren ist auch nicht besonders schwierig. Hier mal auf die Schnelle gecodet:
Delphi-Quellcode:
function NormalizePath(Path:
string):
string;
const
PATH_DELIMITER = '
/';
PARENT_REFERENCE = PATH_DELIMITER + '
..';
var
ReferencePos: integer;
ParentDirPos: integer;
function FindParentReference: Boolean;
begin
ReferencePos := Pos(PARENT_REFERENCE, Path);
Result := ReferencePos > 0;
end;
procedure FindParentDirStart;
begin
ParentDirPos := ReferencePos - 1;
while (ParentDirPos > 0)
and (Path[ParentDirPos] <> PATH_DELIMITER)
do
dec(ParentDirPos);
end;
begin
while FindParentReference
do
begin
FindParentDirStart;
Delete(Path,
ParentDirPos + length(PATH_DELIMITER),
ReferencePos - ParentDirPos + length(PARENT_REFERENCE)
);
end;
Result := Path;
end;
Delphi-Quellcode:
writeln(NormalizePath('A/B/../C')); // -> A/C
writeln(NormalizePath('A/../C')); // -> C
writeln(NormalizePath('A/B/..')); // -> A/
writeln(NormalizePath('A/B/../D/E/F/../../G')); // -> A/D/G
Was nicht behandelt wird, ist, wenn schon am Anfang des Pfads ".." steht bzw. auf eine höhere Ebene als die Wurzelebene verwiesen wird (z.B. "a/../.."), aber das sollte hier eigentlich eh nicht vorkommen, bzw. wenn dann ist es sowieso ein Fehler.