TIdHTTP Post (Indy 10.5.7) = wird zu =3D
-
Hallo zusammen!
Ich habe nun bereits einen kompletten Arbeitstag in dieses Problem gesteckt und gefühlte 100 Themenseiten inkl. Forenbeiträgen im Internet durchgesucht - Das Problem lässt sich leider dennoch nicht lösen.
Was tue ich:
Ich sende diverse Daten (UnicodeString) per TIdMultiPartFormDataStream an ein PHP Skript.
Leider macht mir dabei eine Sache einen Strich durch die Rechnung.= wird zu =3D
Es ist nicht so, dass = durch irgendwelche Enkodierungen durch %3D oder Ähnliches ersetzt wird. Selbst wenn ich die ganze Geschichte durch TIdURI::ParamsEncode jage wird dieses merkwürdige 3D hinzugefügt. (3D = Ascii "=").
Mein Testcode:
boost::scoped_ptr<TIdHTTP> ptr_http( new TIdHTTP( NULL ) ); UnicodeString xml_data = "<dataX dataX-title=\"Irgendein Text\">"; boost::scoped_ptr<TIdMultiPartFormDataStream> data( new TIdMultiPartFormDataStream() ); data->AddFormField("data1", "value1"); data->AddFormField("data2", "value2"); data->AddFormField("dataX" , xml_data ); UnicodeString response = ptr_http->Post( URL , data.get() );
Auf PHP Seite gebe ich einfach den $_POST['dataX'] per echo aus.
Die Antwort ist:
<dataX dataX-title=3D\"Irgendein Text\"><dataX dataX-title=3D\"Irgendein Text\">Ich habe bereits mit Wireshark untersucht wie die Daten versendet werden. Das 3D wird definitiv irgendwie von der Indy Komponente erzeugt.
HTTPOptions ändern hat keinen Einfluss. ContentType ändern hat keinen Einfluss. HTTPEncode bringt keine Abhilfe.
Ich bin mir derzeit nicht im Klaren wo ich noch eigentlich suchen soll.
MFG
Olli
-
Ich habe jetzt mal Folgendes getan:
xml_data = StringReplace( xml_data , "=" , "%3D" , TReplaceFlags() << rfReplaceAll );
Wenn ich nun auf PHP Seite urldecode verwende , kommt der Text richtig an.
TIdURI::ParamsEncode
enkodiert das "=" NICHT!
Das kann doch irgendwie nicht die Endlösung sein. Wer weiß bei welchen Zeichen noch Probleme auftreten. Das scheint mir doch irgendwie verbuggt..