znaków przestrzeń może być kodowane tylko jako "+" w jednym kontekście: Kody pary klucz-wartość application/x-www-form-urlencoded.
RFC-1866 (specyfikacja HTML 2.0), punkt 8.2.1. akapit pierwszy mówi: "Nazwy pól formularza i wartości są unikane: znaki spacji zostają zastąpione znakami" + ", a znaki zastrzeżone").
Oto przykład takiego łańcucha w adresie URL, gdzie RFC-1866 pozwala na kodowanie spacji jako plusów: "http://example.com/over/there?name=foo+bar". Tak więc, tylko po "?", Spacje mogą być zastąpione przez plusy (w innych przypadkach spacje powinny być zakodowane do% 20). Ten sposób kodowania danych formularzy jest również podany w późniejszych specyfikacjach HTML, na przykład wyszukaj odpowiednie akapity dotyczące aplikacji/x-www-form-urlencoded w specyfikacji HTML 4.01 i tak dalej.
Ponieważ trudno jest zawsze poprawnie określić kontekst, najlepiej jest nigdy nie kodować spacji jako "+". Lepiej kodować procentowo wszystkie znaki oprócz "niezarezerwowanych" zdefiniowanych w RFC-3986, p.2.3. Oto przykład kodu, który ilustruje, co powinno być zakodowane.Lek podaje się w Delphi (pascal) język programowania, ale to jest bardzo łatwe do zrozumienia, jak to działa dla każdego programisty, niezależnie od języka posiadał:
(* 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 = 'ABCDEF';
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;
http://www.w3schools.com/tags/ref_urlencode. asp –
Zauważ, że w php urldecode dekoduje% 2b (kodowany +) do spacji. Aby tego uniknąć, użyj 'rawurldecode'. Mówię to tutaj w celach informacyjnych, ponieważ jest to wynik wysoko oceniany w wyszukiwarce Google dla "zerwania dekodowania adresu URL w php na plusie". – danielson317
Możliwy duplikat [Kiedy zakodować spację na plus (+) lub% 20?] (Http://stackoverflow.com/questions/2678551/when-to-encode-space-to-plus-or-20) – user