Vielen Dank für Tipps!
Delphi-Quellcode:
Function UrlToFilename(
Const sURL:
String ) :
String;
var
tmp:
String;
iPos: Integer;
begin
Result := '
';
tmp := sURL;
iPos := Pos('
?',tmp);
if iPos > 0
then tmp := Copy(tmp,1,iPos - 1);
iPos := Pos('
//',tmp);
if iPos > 0
then
begin
tmp := Copy(tmp,iPos+2,Length(tmp));
iPos := Pos('
/',tmp);
if iPos <> 0
then
repeat
tmp := Copy(tmp,iPos + 1,Length(tmp));
iPos := Pos('
/',tmp);
until iPos = 0
else tmp := '
index.html';
for iPos := 1
to Length(tmp)
do
begin
if ((Ord(Char(tmp[iPos])) >= $20)
and(Ord(Char(tmp[iPos])) <= $7F))
then // only use chars between ascii #32 and #127
if ((tmp[iPos]<>'
"')
and(tmp[iPos]<>'
$')
and(tmp[iPos]<>'
?')
and(tmp[iPos]<>'
*')
and(tmp[iPos]<>'
<')
and(tmp[iPos]<>'
>')
and(tmp[iPos]<>'
/')
and(tmp[iPos]<>'
\'))
then // filter out bad filename chars
Result := Result + tmp[iPos];
end;
end;
if Result = '
'
then Result := '
index.html';
end;
So macht es genau was ich will, tut mir leid das ich den Source so verunstaltet habe aber so scheint es zu funktionieren.
@Delphi.Narium: Ja, so grausam es klingen mag aber was Du schreibst trifft den Nagel auf den Kopf.
Zuerst alles hinter "?" kappen
Dann alles vor "//" kappen
Jetzt gucken ob ein "/" existiert oder "index.html" ausgeben.
Falls mehrere "/" existieren halt nur den Rest dahinter verwenden.
Wenn dann noch etwas übrig sein sollte durch den Char-Checker jagen.
Zu guter letzt, falls kein Ergebnis vorliegt ein "index.html" draus machen.