我想使用indy 10使用delphi发送西里尔语的帖子数据。 好吧我知道如何发送数据但是当我发送书面或西里尔文时,后期数据响应带有一些编码符号。 有我的代码
http := TIDHttp.Create(nil);
http.HandleRedirects := true;
http.ReadTimeout := 5000;
http.Request.ContentType:='multipart/form-data';
param:=TIdMultiPartFormDataStream.Create;
param.AddFormField('com','offers');
param.AddFormField('op','new');
param.AddFormField('MAX_FILE_SIZE','1048576');
param.AddFormField('offer[secid]','34');
param.AddFormField('offer[fullname]',UserArray[0], 'utf-8');
param.AddFormField('offer[email]',UserArray[1]);
param.AddFormField('offer[phone]',UserArray[2]);
param.AddFormField('offer[url]',UserArray[4]);
param.AddFormField('offer[city]','София', 'utf-8');
param.AddFormField('offer[offer_buysell]','sell');
param.AddFormField('offer[catid]','95');
param.AddFormField('offer[title]',AdArray[0], 'utf-8');
param.AddFile( 'image[0]', AdArray[3], 'image/jpeg' );
param.AddFormField('offer[description]',AdArray[1], 'utf-8');
param.AddFormField('offer[price]',AdArray[2]);
param.AddFormField('offer[offer_end]','180');
param.AddFormField('offer[email_onquestion]','1');
param.AddFormField('iagree','1');
param.AddFormField('btnSaveOffer','Изпрати', 'utf-8');
valid:=true;
url:='http://127.0.0.1/POST.php';
text:=http.Post(url,param);
这是我的POST.php
的回复<?php print_r($_POST); ?>
答案 0 :(得分:4)
您告诉AddFormField()
使用UTF-8对文本值进行编码,然后使用MIME quoted-printable
编码在传输过程中对UTF-8八位字节进行额外编码,这是{的默认设置{1}}文本数据的属性。您正在PHP输出中看到带引号的可打印文本。如果您希望PHP接收原始UTF-8八位字节,请将TIdFormDataField.ContentTransfer
属性设置为'8bit'或'binary',例如:
TIdFormDataField.ContentTransfer
否则,您的PHP代码必须使用quoted-printable-decode()函数解码引用的可打印数据。
答案 1 :(得分:1)
您的“编码标志”是采用UTF8编码的西里尔字母。您可以使用correspondent encoding table手动解码它们。例如
D0 A1 D0 BE D1 84 D0 B8 D1 8F - &gt; София
答案 2 :(得分:0)
PHP服务器以引用的可打印格式接收UTF-8编码的字符串。要验证这一点,请检查应用程序是否在IdMulitpartFormData:
中遇到此行FContentTransfer := sContentTransferQuotedPrintable;
然而,PHP方应该能够处理这种传输模式。