Turn any text into a URL-safe percent-encoded string and back. Correctly handles UTF-8, so Cyrillic and other non-Latin characters survive the round trip.
Whenever a value goes into a URL: query parameters, path segments, redirect targets. Spaces, &, ?, # and non-Latin characters must be percent-encoded.
%20 is the universal encoding of a space; + means space only in the query-string form encoding. When in doubt, use %20.
The string was probably encoded twice, or it isn't UTF-8. Try decoding twice or check the source encoding.
Yes — encoding a full URL would break its structure (:// and /). Encode individual parameter values, not the whole address.