caratteri spaziali possono essere codificati solo come "+" in un contesto: coppie chiave-valore application/x-www-form-urlencoded.
RFC-1866 (specifica HTML 2.0), paragrafo 8.2.1. il paragrafo 1. dice: "I nomi e i valori dei campi del modulo sono sottoposti a escape: i caratteri dello spazio sono sostituiti da" + ", quindi i caratteri riservati sono sfuggiti").
Ecco un esempio di tale stringa nell'URL in cui RFC-1866 consente di codificare gli spazi come vantaggi: "http://example.com/over/there?name=foo+bar". Quindi, solo dopo "?", Gli spazi possono essere sostituiti da punti positivi (negli altri casi, gli spazi devono essere codificati in% 20). Questo modo di codificare i dati del modulo viene anche fornito nelle specifiche HTML successive, ad esempio, cercare i paragrafi pertinenti su application/x-www-form-urlencoded nella specifica HTML 4.01 e così via.
Tuttavia, poiché è difficile determinare sempre correttamente il contesto, è consigliabile non codificare mai spazi come "+". È meglio codificare per percentuale tutti i caratteri tranne "senza riserva" definiti in RFC-3986, p.2.3. Ecco un esempio di codice che illustra ciò che dovrebbe essere codificato.E 'dato in Delphi (Pascal) linguaggio di programmazione, ma è molto facile da capire come funziona per qualsiasi programmatore indipendentemente dalla lingua posseduta:
(* 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;
fonte
2016-10-27 19:00:28
http://www.w3schools.com/tags/ref_urlencode. asp –
Nota che in php urldecode decodifica% 2b (codificato +) in uno spazio. Per evitare questo uso 'rawurldecode'. Dico questo qui per riferimento perché questo è un risultato di alto valore su google cerca "interruzioni di decodifica php url sul simbolo più". – danielson317
Possibile duplicato di [Quando codificare lo spazio su più (+) o% 20?] (Http://stackoverflow.com/questions/2678551/when-to-encode-space-to-plus-or-20) – user