Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy Http.Post Delphi 2007 -> Delphi 2010 Umlaute (https://www.delphipraxis.net/155810-indy-http-post-delphi-2007-delphi-2010-umlaute.html)

Schorschi5566 9. Nov 2010 09:15

Indy Http.Post Delphi 2007 -> Delphi 2010 Umlaute
 
Hallo DP,

ich habe schon etliche Posts zum Thema durchsucht, komme aber zu keiner Lösung.

Folgende Situation:
Auf einem Forum editiere ich per Indy-Http.Post meine Postings. Dabei wird der alte Inhalt mit Get ausgelesen, aktualisiert und wieder gepostet.

Beim Posten wird wohl einmal zuviel nach UTF8 konvertiert, weshalb ein Ä beispielsweise zu Ä auf dem Forum wird.

Die per Get erhaltenen Inhalte sind noch richtig.

Mit Delphi 2007 hat das Ganze problemlos funktioniert und an der Serverseite hat sich nichts verändert.

Folgender Code wurde in der Delphi 2007er-Version verwendet.

Delphi-Quellcode:
Strings := TStringList.Create;
try
  Strings.Add('send=send');
  Strings.Add('sid=' + sSid);
  sPostNr := '353453';
  Strings.Add('postid=' + sPostNr);
  Strings.Add('submit=Beitrag speichern');
  sMessage := Memo3.Text;
  Strings.Add('message=' + sMessage);
  IdHTTP1.HandleRedirects := True;
  try
    Memo2.text := idHTTP1.Post('http://www.testsite.de//editpost.php', Strings);
  except
    showmessage('Fehler beim Posten');
  end;
finally
  Strings.Free;
end;

Die Seiten des Forums sind so codiert:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Schalte ich hoForceEncodeParams aus, wird gar nichts mehr gepostet. sMessage wurde schon als AnsiString und String probiert. Mit Contenttype und Charset habe ich auch schon "rumgespielt", was aber auch keinen Erfolg brachte.

Hat jemand einen Tipp, wie man das unter Delphi 2010 zum Laufen bekommt?


Viele Grüße,
Uwe

Schorschi5566 12. Nov 2010 18:21

AW: Indy Http.Post Delphi 2007 -> Delphi 2010 Umlaute
 
Kann mir wirklich niemand auf die Spur helfen?

Welche Eigenschaften von TIdHttp sind für Post überhaupt relevant?

Oder funktioniert der Ansatz mit der StringList gar nicht mehr unter D2010 mit Umlauten? Oder sollte man die Indies updaten? Fragen über Fragen. :(

Hat jemand sowas schonmal mit D2010 hinbekommen?

Wäre sehr dankbar für einige Denkanstösse.


Grüße,
Uwe

geskill 22. Feb 2011 15:29

AW: Indy Http.Post Delphi 2007 -> Delphi 2010 Umlaute
 
Ist schon etwas älter aber ich bin gerade durch die Suche drauf gestoßen.

Wenn die Webseite in ISO-8859-1 kodiert ist:
Delphi-Quellcode:
Params := TStringStream.Create('');
try
  Params.WriteString('name=' + HTTPEncode('value') + '&');

  // [...]
finally
  Params.Free;
end;
Wenn die Webseite in UTF-8 kodiert ist:
Delphi-Quellcode:
Params := TStringStream.Create('', CP_UTF8);
try
  Params.WriteString('name=' + 'value' + '&'); // ggf. SmallHTTPEncode()

  // [...]
finally
  Params.Free;
end;

// [...]

  function SmallHTTPEncode(AStr: string): string;
  begin
    result := StringReplace(AStr, '&', '%26', [rfReplaceAll]);
  end;
Damit fahre ich ATM ganz gut.

Und dann gibt es noch den Weg über TIdMultiPartFormDataStream, dass würde aber hier den Rahmen sprengen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 Uhr.

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