PDA

View Full Version : مشکل post url فارسی



Peresident_y
شنبه 28 اسفند 1389, 12:49 عصر
من برای پست مقادیر به یک پیچ php از روش زیر استفاده میکنم و به خوبی برای کارکتر های لاتین کار میکند
مشکل در مورد ارسال پارامترهای فارسی است و هیچ راهی براش پیدا نکردم
ممنون میشم راهنمای کنید


var
lHTTP: TIdHTTP;
lParamList: TStringList;
var
MD5: IMD5;
begin
MD5 := GetMD5;
MD5.Init;

MD5.Update(PAnsiChar(AnsiString('234324324')));
lParamList := TStringList.Create;
lParamList.Clear;
lParamList.Add('username=api');
lParamList.Add('password='+LowerCase(MD5.AsString) );
lParamList.Add('action=addt');

lParamList.Add('firstname='+(IWEdit1.text));
lParamList.Add('lastname='+(IWEdit2.text));
lParamList.Add('companyname='+(IWEdit3.text));
lParamList.Add('email='+(IWEdit4.text));
lParamList.Add('address1='+(IWEdit5.text));
lParamList.Add('address2='+(IWEdit6.text));
lParamList.Add('city='+(IWEdit7.text));
lParamList.Add('state='+(IWEdit7.text));
lParamList.Add('postcode='+(IWEdit8.text));

lParamList.Add('country='+(IWEdit9.text));
lParamList.Add('phonenumber='+AnsiToUtf8(IWEdit10. text));
lParamList.Add('password2='+IWEdit11.text);
lParamList.Add('groupid=2');
lHTTP := TIdHTTP.Create(nil);
try
Result := lHTTP.Post('http://domain.com/includes/api.php',lParamList);
finally
FreeAndNil(lHTTP);
FreeAndNil(lParamList);
end;

Peresident_y
شنبه 28 اسفند 1389, 12:51 عصر
از AnsiToUtf8 و UrlEncode و Utf8Encode را هم استفاده کردم جواب نداد

vcldeveloper
شنبه 28 اسفند 1389, 18:12 عصر
UrlEncode که کاری به کار Post نداره. از چه نسخه ایی از دلفی استفاده می کنید؟ اگر دلفی 2009 یا بالاتر هست، نباید نیازی به AnsiToUtf8 داشته باشید. چرا کل پارامتر ارسالی را تبدیل به Utf8 نمی کنید، و فقط بعضی فیلدها را تبدیل می کنید؟ آیا Code page سیستم بر روی فارسی تنظیم هست؟ اگر نباشه، AnsiToUtf8 نتیجه درستی برگشت نمیده. آیا با یک Sniffer مثل Wireshark بررسی کردید که داده شما دقیقا به چه شکلی به سرور ارسال میشه؟

Peresident_y
یک شنبه 29 اسفند 1389, 17:08 عصر
UrlEncode که کاری به کار Post نداره. از چه نسخه ایی از دلفی استفاده می کنید؟ اگر دلفی 2009 یا بالاتر هست، نباید نیازی به AnsiToUtf8 داشته باشید. چرا کل پارامتر ارسالی را تبدیل به Utf8 نمی کنید، و فقط بعضی فیلدها را تبدیل می کنید؟ آیا Code page سیستم بر روی فارسی تنظیم هست؟ اگر نباشه، AnsiToUtf8 نتیجه درستی برگشت نمیده. آیا با یک Sniffer مثل Wireshark بررسی کردید که داده شما دقیقا به چه شکلی به سرور ارسال میشه؟
از 2009 استفاده میکنم
encoding page مقصد امکان بررسی ندارد اما از فارسی که پشتیبانی نمیکنه
بله با هر کودینگ نتیجه متفاوت است اما خروجی استاندارد به نظر میرسه
مثلا برای url encode
%D8%AA%D8%B3%D8%AA
ایا در ارسال ها استاندارد خاصی برای فارسی وجود دارد؟

vcldeveloper
یک شنبه 29 اسفند 1389, 17:28 عصر
از 2009 استفاده میکنم
خب، پس نباید از AnsiToUtf8 استفاده کنید، از Utf8Encode استفاده کنید. بهتره کل پارامترها رو در یک string بریزید، با Utf8Encode تبدیلش کنید به Utf8، سپس اون رو در یک stream بریزید، و stream رو به متد Post بدید. UrlEncode هم نمیخواد.

Peresident_y
یک شنبه 29 اسفند 1389, 19:34 عصر
با این کتر کارکتر های دریافتی تبدیل میشند به ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

vcldeveloper
یک شنبه 29 اسفند 1389, 23:20 عصر
با این کتر کارکتر های دریافتی تبدیل میشند به ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
کدی که الان نوشتید چی هستید؟ از چه کلاس stream ایی استفاده کردید؟ از TStringStream با اینکدینگ UTF-8 آزمایش کنید. تا جایی که خاطرم هست، در صورت استفاده از اون کلاس، نیاز به Utf8Encode هم نباید داشته باشید، چون در صورتی که برای stream نوع Encoding را مشخص کرده باشید، خودش باید بتونه داده ورودی را به اون Encoding خاص تبدیل کنه.

ahmad.khaliq
پنج شنبه 15 اردیبهشت 1390, 18:49 عصر
من هم همچین مشکلی داشتم.

اما یک ابتکار به خرج دادم و مشکلم حل شد. البته آقای کشاورز که استاد همه ما هستند.
به هر حال من روش خودم رو برات مینویسم. اگه از روش خودت به نتیجه نرسیدی، از روش من استفاده کن.

من یک تابع توی دلفی نشوتم که نوشته ها را انکود میکنه

یعنی مثلا حرف "آ" vرو با مقدار "a1*" جابجا میکنه. (این تابع هر 32 حرف فارسی رو باید با مقادیر یکتا جایگزین کنه)

بعد در سمت سرور، دوباره این کاراکتر ها رو با مقادیر اصلی جابه جا میکنم.

یعنی مثلا حرف " a1* " رو با مقدار "آ" جابجا میکنه. و در نهایت جمله ها و نشته های من بدون مشکل از دلفی به سرور ارسال میشن.



پانوشت: میدونم این روش خیلی مهندسی نیست. اما به هرحال مشکل من رو که حل کرد.