अंतरिक्ष वर्ण केवल एक संदर्भ में "+" के रूप में एन्कोड किया जा सकता है: अनुप्रयोग / x-www-form-urlencoded कुंजी-मूल्य जोड़े।
RFC-1866 (HTML 2.0 विनिर्देश), पैरा 8.2.1। उपप्रकार 1. कहता है: "प्रपत्र फ़ील्ड नाम और मान बच गए हैं: अंतरिक्ष वर्णों को '+' द्वारा प्रतिस्थापित किया जाता है, और फिर आरक्षित वर्ण बच जाते हैं")।
यहां URL में ऐसे स्ट्रिंग का एक उदाहरण है जहां RFC-1866 प्लस के रूप में एन्कोडिंग रिक्त स्थान की अनुमति देता है: " http://example.com/over/there?name=foo+bar "। तो, केवल "?" के बाद, रिक्त स्थान को प्लसस द्वारा प्रतिस्थापित किया जा सकता है (अन्य मामलों में, रिक्त स्थान% 20 तक एन्कोड किया जाना चाहिए)। प्रपत्र डेटा एन्कोडिंग का यह तरीका बाद के HTML विनिर्देशों में भी दिया गया है, उदाहरण के लिए, HTML 4.01 विशिष्टता में एप्लिकेशन / x-www-form-urlencoded के बारे में प्रासंगिक पैराग्राफ देखें, और इसी तरह।
लेकिन, क्योंकि यह हमेशा संदर्भ को सही ढंग से निर्धारित करने के लिए कठिन है, इसलिए रिक्त स्थान को कभी भी "+" के रूप में सांकेतिक शब्दों में बदलना नहीं है। RFC-3986, p.2.3 में परिभाषित "अनारक्षित" को छोड़कर सभी वर्णों को प्रतिशत-सांकेतिक शब्दों में बदलना बेहतर है। यहां एक कोड उदाहरण है जो दिखाता है कि एन्कोडेड क्या होना चाहिए। यह डेल्फी (पास्कल) प्रोग्रामिंग भाषा में दिया गया है, लेकिन यह समझना बहुत आसान है कि यह किसी भी प्रोग्रामर के लिए कैसे काम करता है, चाहे उसकी भाषा कोई भी हो:
(* 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;