স্পেস অক্ষরগুলি কেবলমাত্র একটি প্রসঙ্গে "+" হিসাবে এনকোড করা যেতে পারে: অ্যাপ্লিকেশন / x-www-form-urlencoded কী-মান জোড়া।
আরএফসি -1866 (এইচটিএমএল 2.0 স্পেসিফিকেশন), অনুচ্ছেদ 8.2.1। উপপরিমাণ ১। বলেছেন: "ফর্মের ক্ষেত্রের নাম এবং মানগুলি পালানো হয়েছে: স্থান অক্ষরগুলি` + 'দ্বারা প্রতিস্থাপিত হবে, এবং তারপরে সংরক্ষিত অক্ষরগুলি পালিয়ে যাবে ")।
এখানে ইউআরএলটিতে এমন একটি স্ট্রিংয়ের উদাহরণ রয়েছে যেখানে আরএফসি-1866 এনকোডিং স্পেসকে প্লাস হিসাবে মঞ্জুরি দেয়: " http://example.com/over/there?name=foo+bar "। সুতরাং, কেবল "?" এর পরে, স্পেসগুলি প্লাস দ্বারা প্রতিস্থাপন করা যেতে পারে (অন্যান্য ক্ষেত্রে, স্পেসগুলি% 20 এ এনকোড করা উচিত)। ফর্ম ডেটা এনকোডিংয়ের এই উপায়টি পরবর্তী এইচটিএমএল স্পেসিফিকেশনেও দেওয়া হয়, উদাহরণস্বরূপ, এইচটিএমএল 4.0.০১ স্পেসিফিকেশনে অ্যাপ্লিকেশন / x-www-form-urlencoded সম্পর্কিত প্রাসঙ্গিক সন্ধান করুন ইত্যাদি।
তবে, যেহেতু প্রসঙ্গটি যথাযথভাবে নির্ধারণ করা শক্ত, তাই স্পেসগুলি কখনই "+" হিসাবে এনকোড না করা সেরা অভ্যাস। আরএফসি -3986-তে সংজ্ঞায়িত "অনারক্ষিত" ব্যতীত সমস্ত চরিত্রকে শতাংশ-এনকোড করা ভাল p এখানে একটি কোড উদাহরণ রয়েছে যা চিত্রটি বোঝায় যে কী এনকোড করা উচিত। এটি ডেল্ফি (পাস্কাল) প্রোগ্রামিং ভাষায় দেওয়া হয়েছে তবে এটি যে কোনও প্রোগ্রামারের পক্ষে ভাষা নির্বিশেষে এটি কোনও প্রোগ্রামারের পক্ষে কীভাবে কাজ করে তা বোঝা খুব সহজ:
(* percent-encode all unreserved characters as defined in RFC-3986, p.2.3 *)
function UrlEncodeRfcA(const S: AnsiString): AnsiString;
const
HexCharArrA: array [0..15] of AnsiChar = '0123456789ABCDEF';
var
I: Integer;
c: AnsiChar;
begin
// percent-encoding, see RFC-3986, p. 2.1
Result := S;
for I := Length(S) downto 1 do
begin
c := S[I];
case c of
'A' .. 'Z', 'a' .. 'z', // alpha
'0' .. '9', // digit
'-', '.', '_', '~':; // rest of unreserved characters as defined in the RFC-3986, p.2.3
else
begin
Result[I] := '%';
Insert('00', Result, I + 1);
Result[I + 1] := HexCharArrA[(Byte(C) shr 4) and $F)];
Result[I + 2] := HexCharArrA[Byte(C) and $F];
end;
end;
end;
end;
function UrlEncodeRfcW(const S: UnicodeString): AnsiString;
begin
Result := UrlEncodeRfcA(Utf8Encode(S));
end;