อักขระช่องว่างสามารถเข้ารหัสเป็น "+" ในบริบทเดียวเท่านั้น: แอปพลิเคชัน / x-www-form-urlencoded คู่คีย์ - ค่า
RFC-1866 (สเปค HTML 2.0), ย่อหน้า 8.2.1 อนุวรรค 1 กล่าวว่า: "ชื่อเขตข้อมูลฟอร์มและค่าจะถูก Escape: อักขระช่องว่างจะถูกแทนที่ด้วย` + 'แล้วตัวละครที่สงวนไว้จะถูกหลบหนี ")
นี่คือตัวอย่างของสตริงดังกล่าวใน URL ที่ RFC-1866 อนุญาตให้เข้ารหัสพื้นที่เป็น pluses: " http://example.com/over/there?name=foo+bar " ดังนั้นหลังจาก "?" ช่องว่างสามารถถูกแทนที่ด้วย pluses (ในกรณีอื่น ๆ ช่องว่างควรถูกเข้ารหัสเป็น% 20) วิธีการเข้ารหัสข้อมูลในแบบฟอร์มนี้ยังมีให้ในข้อกำหนด HTML ในภายหลังเช่นค้นหาย่อหน้าที่เกี่ยวข้องเกี่ยวกับ application / x-www-form-urlencoded ใน HTML 4.01 Specification และอื่น ๆ
แต่เนื่องจากเป็นการยากที่จะระบุบริบทอย่างถูกต้องเสมอจึงเป็นวิธีปฏิบัติที่ดีที่สุดที่จะไม่เข้ารหัสช่องว่างเป็น "+" จะดีกว่าการเข้ารหัสเปอร์เซ็นต์อักขระทั้งหมดยกเว้น "unreserved" ที่กำหนดใน RFC-3986, p.2.3 นี่คือตัวอย่างรหัสที่แสดงสิ่งที่ควรเข้ารหัส มันได้รับในภาษาการเขียนโปรแกรม Delphi (ปาสคาล) แต่มันง่ายมากที่จะเข้าใจวิธีการทำงานสำหรับโปรแกรมเมอร์ใด ๆ โดยไม่คำนึงถึงภาษาที่ครอบครอง:
(* 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;