Percent-encode or decode a whole list of URLs, query parameters, or strings at once — one per line in, one per line out, same order.
Component mode (JavaScript's encodeURIComponent) escapes every character that has structural meaning in a URL, including : / ? # & =. Use this for a single value that's going inside a URL — a query parameter, a path segment, a redirect target embedded in another URL — since those structural characters need to be escaped or they'll be misread as part of the URL's own structure rather than as data.
Full URL mode (JavaScript's encodeURI) leaves those structural characters alone and only escapes things that are never valid anywhere in a URL, like spaces and non-ASCII characters. Use this when the input is a complete, already-structured URL that you want to make safe without breaking it apart.
Getting this backwards is the most common mistake: running a full URL through component-mode encoding turns its own :// and ? into percent-codes, breaking it entirely. Running a single query value through URL mode often leaves characters like & or = unescaped inside that value, which then gets misread as a second parameter once it's inserted into the real URL.
Percent-encoding replaces a character with a percent sign followed by its byte value in hexadecimal — a space becomes %20, for example. Multi-byte characters (accented letters, non-Latin scripts, emoji) get encoded as their UTF-8 byte sequence, which is why one visible character can turn into several percent-codes in the output.
That's a separate, older convention specific to application/x-www-form-urlencoded form submissions, not standard URI percent-encoding — in that context + means space. This tool follows standard percent-encoding rules (where a literal space becomes %20, not +), so if your input came from a form submission that used the + convention, replace + with a space before decoding, or the result will keep a stray plus sign.
No. Both directions run using your browser's built-in encodeURIComponent()/decodeURIComponent() and encodeURI()/decodeURI() functions — no network request happens, which you can confirm in your browser's dev tools Network tab.
Plain text with no % sequences decodes to itself unchanged, since there's nothing to convert. If the input contains a malformed percent-sequence (like a stray % not followed by two valid hex digits), that specific line is flagged as a decode error rather than silently producing garbled output.