簡體   English   中英

Delphi Indy 以西里爾文發送 POST 數據

[英]Delphi Indy Send POST data in Cyrillic

我想使用 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); ?>

有現場響應

您告訴AddFormField()使用 UTF-8 對文本值進行編碼,然后在傳輸過程中使用 MIME 的quoted-printable編碼對 UTF-8 八位字節進行額外編碼,這是文本數據的TIdFormDataField.ContentTransfer屬性的默認設置。 您在 PHP output 中看到了引用的可打印文本。 如果您希望 PHP 接收原始 UTF-8 八位字節,請將TIdFormDataField.ContentTransfer屬性設置為“8bit”或“binary”,例如:

param.AddFormField('offer[fullname]',UserArray[0], 'utf-8').ContentTransfer := '8bit';

否則,您的 PHP 代碼將不得不使用quoted-printable-decode() function 解碼quoted-printable 數據。

您的“編碼符號”是 UTF8 編碼的西里爾字母。 您可以使用相應的編碼表手動解碼它們。 例如

D0 A1 D0 BE D1 84 D0 B8 D1 8F -> София

PHP 服務器以引用的可打印格式接收 UTF-8 編碼字符串。 要驗證這一點,請檢查應用程序是否命中 IdMulitpartFormData 中的這一行:

FContentTransfer := sContentTransferQuotedPrintable;

然而,PHP 端應該能夠處理這種傳輸模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM