PDA

View Full Version : مشکل با URL Decode



Valadi
چهارشنبه 23 بهمن 1387, 13:00 عصر
با سلام
من با یک صفحه بادی html کار می کنم که متنهای فارسی URL Encode شده است حالا با یونت پایین تست می کنم جواب نمی ده
بصور مثال : کلمه "سلام " را اینکدش میشه %D8%B3%D9%84%D8%A7%D9%85+ اما وقتی برمی گردونم بدین شکل است "سلام "
این هم یونت

unit Unit2;

interface

uses SysUtils;

function UrlEncode(const DecodedStr: String; Pluses: Boolean): String;

function UrlDecode(const EncodedStr: String): String;

function HexToInt(HexStr: String): Int64;


implementation

function UrlEncode(const DecodedStr: String; Pluses: Boolean): String;
var
I: Integer;
begin
Result := '';
if Length(DecodedStr) > 0 then
for I := 1 to Length(DecodedStr) do
begin
if not (DecodedStr[I] in ['0'..'9', 'a'..'z',
'A'..'Z', ' ']) then
Result := Result + '%' + IntToHex(Ord(DecodedStr[I]), 2)
else if not (DecodedStr[I] = ' ') then
Result := Result + DecodedStr[I]
else
begin
if not Pluses then
Result := Result + '%20'
else
Result := Result + '+';
end;
end;
end;

function UrlDecode(const EncodedStr: String): String;
var
I: Integer;
begin
Result := '';
if Length(EncodedStr) > 0 then
begin
I := 1;
while I <= Length(EncodedStr) do
begin
if EncodedStr[I] = '%' then
begin
Result := Result + Chr(HexToInt(EncodedStr[I+1]
+ EncodedStr[I+2]));
I := Succ(Succ(I));
end
else if EncodedStr[I] = '+' then
Result := Result + ' '
else
Result := Result + EncodedStr[I];

I := Succ(I);
end;
end;
end;

function HexToInt(HexStr: String): Int64;
var RetVar : Int64;
i : byte;
begin
HexStr := UpperCase(HexStr);
if HexStr[length(HexStr)] = 'H' then
Delete(HexStr,length(HexStr),1);
RetVar := 0;

for i := 1 to length(HexStr) do begin
RetVar := RetVar shl 4;
if HexStr[i] in ['0'..'9'] then
RetVar := RetVar + (byte(HexStr[i]) - 48)
else
if HexStr[i] in ['A'..'F'] then
RetVar := RetVar + (byte(HexStr[i]) - 55)
else begin
Retvar := 0;
break;
end;
end;

Result := RetVar;
end;

end.




حالا باید چه کار کرد ؟

vcldeveloper
پنج شنبه 24 بهمن 1387, 02:50 صبح
نویسنده سورس گفته که این کد میتونه URLها را درست به معادلی یونیکد آنها Decode بکنه؟ بنظر میاد که باید فقط روی کارکترهای ASCII کار بکنه.

Valadi
پنج شنبه 24 بهمن 1387, 10:27 صبح
با سلام آقای کشاورز

نویسنده سورس گفته که این کد میتونه URLها را درست به معادلی یونیکد آنها Decode بکنه؟
بله ، بطور مثال : کلمه "سلام " را اینکدش میشه %D8%B3%D9%84%D8%A7%D9%85+ اما وقتی برمی گردونم بدین شکل است "سلام " در واقع چرت و پرت نمایش میده !
راه حل؟

vcldeveloper
پنج شنبه 24 بهمن 1387, 16:30 عصر
بله ، بطور مثال : کلمه "سلام " را اینکدش میشه %D8%B3%D9%84%D8%A7%D9%85+ اما وقتی برمی گردونم بدین شکل است "سلام " در واقع چرت و پرت نمایش میده !
من که در اون کد همچین چیزی نمی بینم! در اون کد سعی شده از روی کد تولید شده برای URL اینکد شده، یک کد اسکی با استفاده از تابع CHR استخراج بشه. در واقع برای هر کارکتر Encode شده، دو کارکتر بعد از % خوانده میشند، و به integer تبدیل میشند، سپس کارکتر اسکی مربوط به عدد صحیح تولید شده، با استفاده از Chr برگشت داده میشه.