AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TIdHTTP.Post / PHP / Umlaute in Formulardaten
Thema durchsuchen
Ansicht
Themen-Optionen

TIdHTTP.Post / PHP / Umlaute in Formulardaten

Ein Thema von kriegste · begonnen am 6. Sep 2010 · letzter Beitrag vom 6. Sep 2010
Antwort Antwort
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#1

AW: TIdHTTP.Post / PHP / Umlaute in Formulardaten

  Alt 6. Sep 2010, 21:27
Hallo,

ob dein Delphi-Code korrektes UTF-8 sendet weiß ich nicht, dass muss dir jemand anderes sagen. Gehen wir aber mal davon aus, dann sollte folgender PHP-Code Abhilfe schaffen:

PHP-Quellcode:
header('Content-Type: text/html; charset=utf-8');

echo $_POST['daten'];
Statt des Header-Aufrufs, kann man bei Apache-Servern auch eine Datei namens .htaccess anlegen und mit folgendem Inhalt versehen:

Code:
AddDefaultCharset utf-8
Denke einfach immer daran, eine Informations-Kette zu erstellen. Jedes beteiligte Element dieser Kette muss den Charset direkt oder indirekt wissen. Delphi kodiert die Daten als UTF-8 und sendet diese (mit entsprechender Markierung!!) an PHP. PHP weiß dann zwar, dass es sich um UTF-8 handelt, aber der Browser weiß das nicht. Also muss auch der via HTTP-Header informiert werden.

Noch ein kleines Experiment: Bei kaputtem Charset im Firefox unter Ansicht -> Zeichenkodierung mal einen anderen Charset auswählen. Sofern man nicht irgendwas kaputt-kodiert hat (utf8_decode ), hat man damit das Problem meist schon identifiziert. Man sieht also, dass lediglich dem Browser die Kenntniss über den richtigen Zeichesatz fehlt.

Liebe Grüße,
Valle

Liebe Grüße,
Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
kriegste

Registriert seit: 9. Jul 2006
25 Beiträge
 
#2

AW: TIdHTTP.Post / PHP / Umlaute in Formulardaten

  Alt 6. Sep 2010, 21:39
Ohne utf8_decode(), wie in meinem Beispiel und dafür mit deinem Header passiert genau das Gleiche:

äöüß wird zu aou?

Edit: Ah, aber immerhin speichert PHP jetzt korrekt ab, wenn ich die Daten in ein Textfile schreiben lasse. Danke! Die Rückgabe will ich jetzt aber trotzdem noch hinkriegen...

Geändert von kriegste ( 6. Sep 2010 um 21:44 Uhr)
  Mit Zitat antworten Zitat
kriegste

Registriert seit: 9. Jul 2006
25 Beiträge
 
#3

AW: TIdHTTP.Post / PHP / Umlaute in Formulardaten

  Alt 6. Sep 2010, 22:59
Lösung sieht jetzt so aus

Code:
<?php
header('Content-Type: text/html; charset=UTF-8');
echo $_POST["test"];
?>
Code:
var
  ds: TIdMultipartFormDataStream;
  ms: TMemoryStream;
  s: String;
begin
  ds:= TIdMultipartFormDataStream.Create;
  ms:= TMemoryStream.Create;
  try
    s:= 'äöüß';
    if s <> '' then ms.Write(s[1], Length(s));
    ds.AddObject('test', 'text/plain', '', ms);
    try
      HTTP.Post('http://localhost/test.php', ds, ms);
      SetLength(s, ms.Size);
      ms.Read(s[1], ms.Size);
      ShowMessage(s);
    except
    end;
  finally
    FreeAndNil(ds);
    FreeAndNil(ms);
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:45 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