Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sowas wie UrlEncode (https://www.delphipraxis.net/19916-sowas-wie-urlencode.html)

Florian H 10. Apr 2004 20:11


Sowas wie UrlEncode
 
Hallo,

gibt es für Delphi irgendeine Funktion wie die Funktion "UrlEncode" in PHP?

Also etwas, was z.B. aus "hallo du" ein "hallo%20du" macht
--> URL-tauglicher string

Suche hier und im SDC hat erstaunlicherweise nix gebracht...


grüße
dk

xineohp 10. Apr 2004 20:15

Re: Sowas wie UrlEncode
 
moin,

also ne fertige Funktion kenn ich nicht ... aber ich würde mit AnsiReplaceStr() oder so etwas arbeiten.

phoenix

himitsu 10. Apr 2004 20:22

Re: Sowas wie UrlEncode
 
oder mal in der DP suchen - vor kurzem wurde schonmal danach gefragt ;)

Florian H 10. Apr 2004 20:23

Re: Sowas wie UrlEncode
 
und nach was suchen?

wie gesagt, ich hab nix gefunden...

himitsu 10. Apr 2004 20:28

Re: Sowas wie UrlEncode
 
keine Ahnug, ich dachte da kam das Wort UrlEncode auch din vor - dem schein aber nicht so zu sein und nach %20 kann man leider nicht suchen, da das "%" entfernt wird :(

[add]
kannst ja auch mal Sakura 'ne PN schicken, der hatte (glaub ich) in dem Beitrag viel gepostet

Christian Seehase 10. Apr 2004 20:32

Re: Sowas wie UrlEncode
 
Moin Florian,

schau Dir mal im PSDK oder auf MSDN die Funktion MSDN-Library durchsuchenURLCanonicalize an.
Damit müsste das gehen.

Florian H 10. Apr 2004 20:46

Re: Sowas wie UrlEncode
 
Hm, habe jetzt ne ganze weile lang sakuras beiträge durchgelesen und das mit dem urlcanoniacalize versucht, hat beides nicht zum erfolg geführt...

himitsu 10. Apr 2004 20:49

Re: Sowas wie UrlEncode
 
na dann halt doch so -.-
Delphi-Quellcode:
URL_tauglicher_String := StringReplace(String, ' ', '%20', [rfReplaceAll]);

Florian H 10. Apr 2004 20:57

Re: Sowas wie UrlEncode
 
und die ganzen anderen sachen?
gibt ja noch andere sonderzeichen... :|
Drum habe ich gehofft, es gäbe eine Funktion dafür, damit ich nicht alle einzeln eintippen muss

himitsu 10. Apr 2004 21:08

Re: Sowas wie UrlEncode
 
Ich weiß jetzt nicht genau, welche Zeichen probleme machen, aber die dürften alle gehn - kannst ja noch ein paar in die Liste aufnehmen
(in S gibst du den Strin hin und über S2 bekommst du den URL-tauglichen zurück)
Delphi-Quellcode:
S2 := '';
For i := 1 to Length(S) do
  If S[i] in ['0'..'9', 'A'..'Z', '[', ']', '_', 'a'..'z'] Then S2 := S2 + S[i]
  Else S2 := S2 + '%' + IntToHex(Ord(S[i]), 2);

MathiasSimmack 10. Apr 2004 21:16

Re: Sowas wie UrlEncode
 
Zitat:

Zitat von Florian H
Hm, habe jetzt ne ganze weile lang sakuras beiträge durchgelesen und das mit dem urlcanoniacalize versucht, hat beides nicht zum erfolg geführt...

Was genau hat nicht funktioniert?

Florian H 10. Apr 2004 21:22

Re: Sowas wie UrlEncode
 
ich hab keinen plan wie ich die funktion in delphi bringen soll :)

MathiasSimmack 10. Apr 2004 21:59

Re: Sowas wie UrlEncode
 
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:
Delphi-Quellcode:
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].

Christian Seehase 10. Apr 2004 22:17

Re: Sowas wie UrlEncode
 
Moin Mathias,

UrlCanonicalize ist in der shlwapi.dll enthalten, und muss, aller Voraussicht nach, selber importiert werden.

Florian H 11. Apr 2004 09:26

Re: Sowas wie UrlEncode
 
Danke, das hat geholfen!

hier nochmal als Funktion:
Delphi-Quellcode:
uses WinInet;
...
function EncodeUrl(url : string) : string;
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(
    pchar(url),
    @szUrl[1],
    dwLen,
    0)) then
  begin
    SetLength(szUrl,strlen(pchar(szUrl)));
    result := szURL;
   // ShowMessage(Format('%s (%d)',[szUrl,dwLen]));
  end
  // ... oder im Fehlerfall anzeigen, dass der Puffer
  // größer sein muss
end;
DANKE!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz