Leerzeichen nur als "+" codiert werden können in einem Kontext: application/x-www-form-urlencodierte Schlüssel/Wert-Paare.
Die RFC-1866 (HTML 2.0-Spezifikation), Absatz 8.2.1. Unterabsatz 1. sagt: "Die Formularfeldnamen und Werte sind maskiert: Leerzeichen werden durch" + "ersetzt, und dann sind reservierte Zeichen maskiert").
Hier ist ein Beispiel für eine solche Zeichenfolge in URL, wo RFC-1866 Codierung Leerzeichen als Pluszeichen ermöglicht: "http://example.com/over/there?name=foo+bar". Daher können Leerzeichen erst nach "?" Durch Pluszeichen ersetzt werden (in anderen Fällen sollten Leerzeichen in% 20 codiert werden). Diese Art der Kodierung von Formulardaten wird auch in späteren HTML-Spezifikationen angegeben. Suchen Sie beispielsweise nach relevanten Abschnitten zu Anwendung/x-www-form-urlencoded in HTML 4.01 Specification und so weiter.
Da es jedoch schwierig ist, den Kontext immer korrekt zu bestimmen, empfiehlt es sich, Leerzeichen niemals als "+" zu codieren. Es ist besser, alle Zeichen mit Ausnahme von "nicht reserviert", die in RFC-3986, S.2.3 definiert sind, zu kodieren. Hier ist ein Codebeispiel, das veranschaulicht, was codiert werden sollte.Es wird in Delphi (Pascal) Programmiersprache gegeben, aber es ist sehr leicht zu verstehen, wie es für jeden Programmierer unabhängig von der Sprache arbeitet besaß:
(* 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 –
Beachten Sie, dass in PHP urldecode die% 2b (codiert +) in ein Leerzeichen dekodiert. Um dies zu vermeiden, verwenden Sie 'rawurldecode'. Ich sage das hier als Referenz, weil dies ein hoch bewertetes Ergebnis bei der Google-Suche nach "php url decode breakes on plus symbol" ist. – danielson317
Mögliches Duplikat von [Wenn Platz zu Plus (+) oder% 20 zu codieren?] (Http://stackoverflow.com/questions/2678551/when-to-encode-space-to-plus-or-20) – user