In welche
Unit hat Borland denn "UrlCanonicalize" gepackt? Ich habe auf die Schnelle nur "InternetCanonicalizeUrl" (WinInet-
Unit) gefunden und folgende Idee zusammengeklickt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
szUrl : string;
dwLen : dword;
begin
// Länge für den Puffer festlegen
SetLength(szUrl,MAX_PATH);
ZeroMemory(@szUrl[1],length(szUrl));
// Längenwert für die Funktion merken
dwLen := length(szUrl);
// Funktion aufrufen, ...
if(InternetCanonicalizeUrl(
'http://www.EinURL.de/Ein Dokument mit Leerzeichen.html',
@szUrl[1],
dwLen,
0)) then
begin
SetLength(szUrl,strlen(pchar(szUrl)));
ShowMessage(Format('%s (%d)',[szUrl,dwLen]));
end
// ... oder im Fehlerfall anzeigen, dass der Puffer
// größer sein muss
else
ShowMessage(Format('Sie brauchen einen Puffer mit %d Zeichen.',[dwLen]));
end;
Wenn es nicht funktioniert (weil bspw. der Puffer zu klein ist), dann ist das Ergebnis der Funktion
false, und "dwLen" enthält die benötigte Puffergröße inkl. des Nullzeichens am Ende.
Man sollte vor dem echten Aufruf ermitteln, wie viele Zeichen man benötigt. Dazu darf der Puffer allerdings wohl nicht
nil sein. Zumindest ging das bei mir nicht. Also sollte er auf 1 Zeichen gesetzt werden:
SetLength(szUrl,1);
Dann erhält man in "dwLen" die Puffergröße (wie schon gesagt) und kann dann den String entsprechend dimensionieren.
Alles Wissenswerte im
MSDN: [
msdn]"InternetCanonicalizeUrl"[/
msdn].