AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy idHTTP Probleme mit Umlaute

Indy idHTTP Probleme mit Umlaute

Ein Thema von Cyberaxx · begonnen am 18. Jan 2013 · letzter Beitrag vom 19. Jan 2013
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#1

Indy idHTTP Probleme mit Umlaute

  Alt 18. Jan 2013, 22:48
Delphi 2010
Indy 10.5.9.4797

Hallo,

habe da ein hoffentlich kleine Problem mit der Komponente idHTTP und den lieben Umlauten. Diese werden bei mir mit einem ? ersetzt bei der Ausgabe.

Ausgabe im folgenden Beispiel:
Code:
???
Delphi-Quellcode:
function StringToURLString(aUTF8String: String): String;
  var
    I: Integer;
begin
  Result := '';
  for I := 1 to length(aUTF8String) do
    Result := Result + '%' + String(IntToHex(Ord(aUTF8String[i]),2));
end;

procedure TForm7.Button1Click(Sender: TObject);
  var
    Daten: TIdMultiPartFormDataStream;
    Content: string;
    URL: string;
begin
  Daten := TIdMultiPartFormDataStream.Create;
  try
    Daten.AddFormField('test', StringToURLString('öäü -- ÖÄÜ'));
    try
      URL := Format('%s?version=%s&test=%s', [edtHost.Text, edtVersion.Text, StringToURLString('ÖÄÜ')]);
      IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
      //idHTTP1.Request.ContentType:= 'multipart/form-data';
      //Content := UTF8ToUnicodeString(IdHTTP1.Post(URL, Daten));
      Content := IdHTTP1.Post(URL, Daten);
      EmbeddedWB1.LoadFromString(Content);
    except
      on E: Exception do
        ShowMessage('Fehler: ' + #13#10 + E.Message);
    end;
  finally
    Daten.Free;
  end;
end;
Der entsprechende PHP Teil:
Code:
header('Content-Type: text/xml');  
$Entry2 = urldecode($_GET['test']); echo $Entry2; die('');
Rufe ich im Browser direkt http://192.168.11.10/web/apiPostTest...test=%D6%C4%DC aud bekomme ich ÖÄÜ Angezeigt. Nur die Http Komponente macht daraus eben ???

Nutze ich hingegen noch einmal URLEncode dazu dann bekomme ich im Browser folgendes %C3%84%C3%96%C3%9C. Von der HTTP Komponente dagegen %D6%C4%DC

Bei einem Bekannten ebenfalls D2010 und den Indies die bei Delphi im Standard kommen klappt es ohne Probleme rein mit dem URLDecode seitens PHP.
Ist da vielleicht der Wurm in der Indy zu suchen? Bzw hat jemand schon einmal das Problem gehabt und kennt eine Lösung?
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.003 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Indy idHTTP Probleme mit Umlaute

  Alt 18. Jan 2013, 22:58
Ich sehe im Client - Code zwei Stellen, in denen Umlaute verwendet werden: einmal als Form Parameter und einmal als Request Parameter. Ich würde das Beispiel vereinfachen und reduzieren auf einen der beiden Parameter. Beide haben den Parameternamen 'test'. Die PHP Seite greift vermutlich (!) auf den GET Parameter zu. Also könnte man den gesamten Code für den Form.Parameter entfernen.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Indy idHTTP Probleme mit Umlaute

  Alt 18. Jan 2013, 23:03
Das war nur zum Testen ob es bei GET anders läuft. Eigentlich sollte das ganze über POST geregelt werden.
Im PHP Teil lese ich ja auch nur das GET aus. Lege ich es um auf POST habe ich allerdings das selbe Ergebnis.
Anfangs war es eben nur POST. So kann ich es aber im Webbrowser nach prüfen
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Indy idHTTP Probleme mit Umlaute

  Alt 18. Jan 2013, 23:12
Hallo Cyberaxx,
wandle niemals Umlaute oder irgendwelche Zeichen in der Indy HTTP Komponente manuell um. Die kann das ganz alleine.

1. Für die URL Zeile gibt es die wunderbare Funktion HTTPEncode() aus der Unit HTTPApp.

2. Bei AddFormField wählst du ein CharSet, dadurch weiß die Komponente genau wie sie es zu kodieren hat.

Delphi-Quellcode:
var
     Daten: TIdMultiPartFormDataStream;
     Content: string;
     URL: string;
begin
   Daten := TIdMultiPartFormDataStream.Create;
   try
     Daten.AddFormField('test', 'öäü -- ÖÄÜ', 'UTF-8').ContentTransfer := 'binary';
     try
       URL := Format('%s?version=%s&test=%s', [edtHost.Text, HTTPEncode(edtVersion.Text), HTTPEncode('ÖÄÜ')]);

       IdHTTP1.Request.ContentType := 'multipart/form-data';

       Content := IdHTTP1.Post(URL, Daten);

       EmbeddedWB1.LoadFromString(Content);
     except
       on E: Exception do
         ShowMessage('Fehler: ' + #13#10 + E.Message);
     end;
   finally
     Daten.Free;
   end;
Gerne kannst du dir auch mein Tutorial ansehen:
http://www.delphipraxis.net/160152-i...protokoll.html


EDIT: Hab die Parameterreihenfolge korrigiert

EDIT2: HTTPEncode(...) wendet man natürlich nur auf den GET-Parameterteil in der URL an.

EDIT3: Wo ich gerade dabei bin; application/x-www-form-urlencoded benutzt man bei TIdMultiPartFormDataStream nicht.
Sebastian

Geändert von geskill (18. Jan 2013 um 23:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Indy idHTTP Probleme mit Umlaute

  Alt 18. Jan 2013, 23:29
Also wenn ich dein Beispiel nutze mit POST dann bekomme ich unter $_POST['test'] -> text/plain

Werde es mir mal ansehen
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Indy idHTTP Probleme mit Umlaute

  Alt 18. Jan 2013, 23:35
hm.. Sollte da nicht ein roter Kasten kommen?

Na auch wenn ich die Reihenfolge ändere bekomme ich nicht das gewünschte Ergebnis

Wenn ich Content := IdHTTP1.Post(HTTPEncode(URL), Daten); das versuche dann motzt die Koponente mit Unknown Protocol.
Wenn ich nur ab dem ? das HTTPEncode nutze motzt er an einer anderen stelle mit HTTP/1.1 404
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Indy idHTTP Probleme mit Umlaute

  Alt 18. Jan 2013, 23:42
Ich bin auch nicht ganz auf der Höhe heute Abend :/

Also HTTPEncode(...) wendet man natürlich nur auf den GET-Parameterteil in der URL an. (Weil sonst HTTPEncode :// umwandelt )

Ich muss schon zugeben, dein Format() hat mich bisschen verwirrt. Ich habe meinen Beitrag oben korrigiert.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#8

AW: Indy idHTTP Probleme mit Umlaute

  Alt 18. Jan 2013, 23:56
Es war mal eben auf die schnelle dahin gesaut....

Ich habe bereits die Anwendung am laufen bis dato noch via GET und wollte es auf POST umstellen da auch Profil Bilder übertragen werden.
Vor zwei Tagen ist es mir bei dem vorhandenen Projekt aufgefallen das in der Datenbank anstatt Günny -> G?nny steht und das sah mir ein wenig komisch aus.

Seit dem Fummel ich da rum...

Was mich wundert ist ja bei D2010 standard Indy klappts... und das ist die 10.5.5

Wichtig ist ja auch erst einmal den Content ins richtige Format zu bekommen. Auf PHP Seite kommt ja das richtige an nur es gelant nicht in meinen Content.
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!

Geändert von Cyberaxx (18. Jan 2013 um 23:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#9

AW: Indy idHTTP Probleme mit Umlaute

  Alt 19. Jan 2013, 00:05
Also wenn es jetzt noch nicht klappt, dann arbeitet deine Webseite vielleicht nicht mit UTF-8, dann müsstest du es mal mit ISO-8859-1 probieren.

Im Quellcode jeder Webseite steht folgendes:
Code:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
Darüber findest du es i.d.R. heraus.

Jep bei den Indys gibt es von Version zu Version große Unterschiede (jedenfalls bei der TIdHTTP Komponente).
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#10

AW: Indy idHTTP Probleme mit Umlaute

  Alt 19. Jan 2013, 00:32
Den Quelltext von der PHP Seite war soweit vollständig. Da ist kein HTML enthalten. Eigentlich ist es so das als Ausgabe eine XML erzeugt wird die ich dann auslese. Also nix mit dem ganzen HTML gedöns

Ich mache eigentlich nichts andere als eine Seite aufzurufen index.php?version=1.0.0 und per POST dann sagen hole mir alle aktiven Moderatoren.

Es sei denn ich irre mich und ich muss denonch den Header angeben...

Code:
header('Content-Type: text/xml');  
echo '<?xml version="1.0" encoding="UTF-8"?><api>Content vom Script oder DB oder sonst wo</api>';
Folglich gebe ich ja sozusagen UTF-8 vor? ich probiere es aber mal mit ISO
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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