{"id":103,"date":"2026-05-04T19:21:29","date_gmt":"2026-05-04T23:21:29","guid":{"rendered":"https:\/\/simpletool.io\/blog\/?p=103"},"modified":"2026-05-04T19:21:29","modified_gmt":"2026-05-04T23:21:29","slug":"url-encoder-decoder","status":"publish","type":"post","link":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/","title":{"rendered":"URL Encoder\/Decoder: Percent-Encode Safely [2026]"},"content":{"rendered":"<div class=\"ai-summary\" style=\"padding: 14px 18px; background: #f6f9fc; border-left: 4px solid #635BFF; border-radius: 8px; font-size: 15px; margin-bottom: 28px;\"><strong>TL;DR:<\/strong> URL encoding (also called percent-encoding) replaces unsafe characters in a URL with <code>%XX<\/code> hexadecimal escapes \u2014 for example, a space becomes <code>%20<\/code>, an ampersand becomes <code>%26<\/code>. Use it on <em>query string values<\/em> and <em>path segments<\/em>, not the whole URL. Our <a href=\"https:\/\/simpletool.io\/tools\/url-encoder-decoder\/\">free URL encoder\/decoder<\/a> handles component-only and full-URL modes, fixes double-encoded strings, and is UTF-8 safe.<\/div>\n<p>URLs are constrained to a small set of ASCII characters. Anything else \u2014 spaces, accented letters, emoji, ampersands, plus signs, slashes inside a parameter value \u2014 must be percent-encoded so it survives transport through proxies, caches, and the URL parser at the destination server. Get the encoding wrong and your <code>?q=hello world<\/code> becomes a mangled <code>?q=hello<\/code> followed by an unparseable <code>world<\/code> token. Get the <em>decoding<\/em> wrong and a URL that contains a literal <code>+<\/code> shows up as a space.<\/p>\n<p>Our <a href=\"https:\/\/simpletool.io\/tools\/url-encoder-decoder\/\">URL encoder and decoder<\/a> covers both directions, distinguishes between component encoding (for query values and path segments) and full-URL encoding (for entire links), and detects double-encoded strings so you can recover the original cleanly. This guide explains exactly which characters need encoding under RFC 3986, when to use <code>encodeURIComponent<\/code> vs <code>encodeURI<\/code> in JavaScript, and the gotchas that produce subtle bugs in production.<\/p>\n<h2 class=\"wp-block-heading\">Reserved vs unreserved characters in RFC 3986<\/h2>\n<table style=\"width: 100%; border-collapse: collapse; margin: 12px 0 20px;\">\n<thead>\n<tr style=\"background: #0A2540; color: #fff;\">\n<th style=\"text-align: left; padding: 10px 14px;\">Category<\/th>\n<th style=\"text-align: left; padding: 10px 14px;\">Characters<\/th>\n<th style=\"text-align: left; padding: 10px 14px;\">Encode in component?<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>Unreserved<\/strong><\/td>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><code>A-Z a-z 0-9 - _ . ~<\/code><\/td>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Never<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>Reserved (gen-delims)<\/strong><\/td>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><code>: \/ ? # [ ] @<\/code><\/td>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Yes, in component<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>Reserved (sub-delims)<\/strong><\/td>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><code>! $ &amp; ' ( ) * + , ; =<\/code><\/td>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Yes, in component<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>Space<\/strong><\/td>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><code>(space)<\/code><\/td>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Always \u2014 to <code>%20<\/code> or <code>+<\/code> in form data<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>Other ASCII<\/strong><\/td>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><code>\" &lt; &gt; \\ ^ ` { | }<\/code><\/td>\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Always<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px 14px;\"><strong>Non-ASCII (UTF-8)<\/strong><\/td>\n<td style=\"padding: 10px 14px;\"><code>\u00e9, \u00fc, \u4e2d, \ud83c\udf89<\/code><\/td>\n<td style=\"padding: 10px 14px;\">Always \u2014 encoded byte-by-byte from UTF-8<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 class=\"wp-block-heading\">Component encoding vs full-URL encoding<\/h2>\n<p>The most common mistake is encoding the entire URL when you should be encoding just one part of it. <code>encodeURI<\/code> in JavaScript is for whole URLs and <em>preserves<\/em> reserved characters like <code>?<\/code>, <code>&amp;<\/code>, <code>#<\/code>, and <code>\/<\/code> because they have structural meaning. <code>encodeURIComponent<\/code> is for individual query values, path segments, or form fields and <em>does<\/em> encode those reserved characters because at that level they are just data.<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Encode a query value:<\/strong> Use <code>encodeURIComponent<\/code>. <code>?q=hello world&amp;safe=true<\/code> becomes <code>?q=hello%20world&amp;safe=true<\/code>.<\/li>\n<li><strong>Encode a path segment:<\/strong> Use <code>encodeURIComponent<\/code>. <code>\/users\/Jane Doe<\/code> becomes <code>\/users\/Jane%20Doe<\/code>.<\/li>\n<li><strong>Encode an entire URL:<\/strong> Use <code>encodeURI<\/code>. The slashes and query separators stay intact; only spaces and unsafe characters get escaped.<\/li>\n<li><strong>application\/x-www-form-urlencoded:<\/strong> Spaces become <code>+<\/code> instead of <code>%20<\/code>; otherwise identical to component encoding. This is the form-submission default.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">How to encode or decode a URL<\/h2>\n<ol class=\"wp-block-list\">\n<li>Open the <a href=\"https:\/\/simpletool.io\/tools\/url-encoder-decoder\/\">URL encoder\/decoder<\/a><\/li>\n<li>Paste your text or URL in the input<\/li>\n<li>Pick <strong>Encode component<\/strong>, <strong>Encode full URL<\/strong>, or <strong>Decode<\/strong><\/li>\n<li>Output appears instantly; click <strong>Copy<\/strong> to clipboard<\/li>\n<li>If decoding produced unexpected results, click <strong>Decode again<\/strong> to handle double-encoded strings<\/li>\n<\/ol>\n<h2 class=\"wp-block-heading\">Double-encoding: the most common production bug<\/h2>\n<p>Double-encoding happens when a URL is encoded twice somewhere in its journey \u2014 typically because an HTTP client encodes a value the framework had already encoded. The visible symptom: <code>%2520<\/code> in the final URL where you expected <code>%20<\/code> (a space). The <code>%<\/code> from the original <code>%20<\/code> got encoded a second time to <code>%25<\/code>, which when concatenated with <code>20<\/code> reads as <code>%2520<\/code>.<\/p>\n<p>To fix: decode the string twice. Our tool detects the pattern automatically \u2014 if you paste a URL that decodes to another encoded URL, it offers a &#8220;decode again&#8221; button. The robust server-side fix is to encode at the boundary (where data leaves your code as a URL) and never in any layer above. Frameworks like Axios and Spring respect this by default; jQuery&#8217;s <code>$.param<\/code> and some legacy CMS pipelines do not.<\/p>\n<h2 class=\"wp-block-heading\">Common gotchas<\/h2>\n<ul class=\"wp-block-list\">\n<li><strong>Plus sign means space in form data, but not in URL paths.<\/strong> <code>?q=foo+bar<\/code> decodes to <code>foo bar<\/code> in <code>application\/x-www-form-urlencoded<\/code>; in a path segment, <code>+<\/code> stays as a literal plus. Our decoder respects the mode you pick.<\/li>\n<li><strong>Encoding the protocol breaks the URL.<\/strong> Never encode <code>https:\/\/<\/code> \u2014 the colon and slashes are structural. Use <code>encodeURI<\/code> on the whole URL or just encode the parts that need it.<\/li>\n<li><strong>Tilde (<code>~<\/code>) is unreserved.<\/strong> Some old encoders escape it to <code>%7E<\/code> anyway. RFC 3986 says don&#8217;t. Our encoder leaves it alone.<\/li>\n<li><strong>UTF-8 is the only sane choice.<\/strong> Encoding emoji or Chinese characters produces multi-byte sequences (<code>%E4%B8%AD<\/code> for &#8220;\u4e2d&#8221;). Servers must decode as UTF-8 \u2014 Latin-1 \/ ISO-8859-1 fallbacks corrupt the data.<\/li>\n<li><strong>Single quote (<code>'<\/code>) is sub-delim.<\/strong> Encoded by <code>encodeURIComponent<\/code> to <code>%27<\/code>, but skipped by some legacy tools. Always include it in component encoding.<\/li>\n<li><strong>Hash fragment is encoded with the same rules<\/strong> as the path, not the query. Spaces become <code>%20<\/code>, not <code>+<\/code>.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">When NOT to use this tool<\/h2>\n<p>If your code already runs <code>encodeURIComponent<\/code> on a value, do not paste the result here and click &#8220;Encode&#8221; again \u2014 you will produce double-encoding bugs. Use this tool to <em>decode<\/em> a URL you got from a log file, to <em>encode<\/em> values copied from a spreadsheet before pasting into a URL by hand, or to <em>verify<\/em> what a server is actually receiving. For programmatic encoding inside a build pipeline, use the language-native function (<code>encodeURIComponent<\/code> in JS, <code>urllib.parse.quote<\/code> in Python, <code>URLEncoder.encode(s, \"UTF-8\")<\/code> in Java).<\/p>\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n<h3 class=\"wp-block-heading\">What&#8217;s the difference between encodeURI and encodeURIComponent?<\/h3>\n<p><code>encodeURI<\/code> assumes you have a full, structurally valid URL and only escapes characters that aren&#8217;t allowed anywhere in a URL. <code>encodeURIComponent<\/code> assumes the input is a single value (query parameter, path segment) and escapes <em>all<\/em> reserved characters. Use component for parts; use full only when you trust the input is already a valid URL skeleton with separators in the right place.<\/p>\n<h3 class=\"wp-block-heading\">Why does my URL show %2520 instead of %20?<\/h3>\n<p>Double-encoding. A space was encoded to <code>%20<\/code>; then the whole string was encoded again, and the <code>%<\/code> became <code>%25<\/code>, producing <code>%2520<\/code>. Decode the URL twice to recover the original. The fix in code is to encode at exactly one layer of the request \u2014 never re-encode an already-encoded value.<\/p>\n<h3 class=\"wp-block-heading\">Should I encode my URL parameters before sending an HTTP request?<\/h3>\n<p>If you build the URL with template literals or string concatenation, yes \u2014 wrap each parameter value in <code>encodeURIComponent<\/code>. If you use a library like <code>fetch<\/code> with the <code>URL<\/code> object and <code>URLSearchParams<\/code>, encoding is automatic. Don&#8217;t double up.<\/p>\n<h3 class=\"wp-block-heading\">How do I encode emoji or non-Latin characters?<\/h3>\n<p>Use UTF-8 encoding (the default in JavaScript and Python 3). Emoji and Chinese characters are multi-byte sequences and produce strings like <code>%F0%9F%8E%89<\/code> for \ud83c\udf89 or <code>%E4%B8%AD<\/code> for &#8220;\u4e2d&#8221;. Modern servers and CDNs handle this transparently; legacy IIS and some Java servlet stacks need explicit UTF-8 configuration.<\/p>\n<h3 class=\"wp-block-heading\">Is my URL data uploaded?<\/h3>\n<p>No. The encoder\/decoder runs in your browser via JavaScript. URLs and tokens you paste are never sent to our servers \u2014 useful for decoding tokens, signed URLs, or session strings without leaking them.<\/p>\n<h3 class=\"wp-block-heading\">What&#8217;s the difference between URL encoding and Base64 encoding?<\/h3>\n<p>Different jobs. URL encoding makes a string safe to put inside a URL (only ASCII, only safe characters). Base64 makes binary data fit inside text-only formats like HTTP headers, email, or JSON. They are sometimes combined \u2014 a Base64-encoded JWT can still contain <code>+<\/code> and <code>\/<\/code>, which need URL encoding (or use Base64URL, which substitutes <code>-<\/code> and <code>_<\/code>).<\/p>\n<h2 class=\"wp-block-heading\">Related tools and guides<\/h2>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/simpletool.io\/tools\/url-encoder-decoder\/\">URL Encoder\/Decoder<\/a><\/li>\n<li><a href=\"https:\/\/simpletool.io\/tools\/base64-encoder-decoder\/\">Base64 Encoder\/Decoder<\/a><\/li>\n<li><a href=\"https:\/\/simpletool.io\/tools\/html-encoder-decoder\/\">HTML Encoder\/Decoder<\/a><\/li>\n<li><a href=\"https:\/\/simpletool.io\/tools\/jwt-encoder-decoder\/\">JWT Decoder<\/a><\/li>\n<li><a href=\"https:\/\/simpletool.io\/coding-tools\/\">All coding tools<\/a><\/li>\n<\/ul>\n<p><script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"What's the difference between encodeURI and encodeURIComponent?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"encodeURI is for full URLs and preserves separators like \/, ?, &. encodeURIComponent is for individual values and escapes all reserved characters.\"}},\n{\"@type\":\"Question\",\"name\":\"Why does my URL show %2520 instead of %20?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Double-encoding. The space was encoded to %20, then encoded again \u2014 % became %25. Decode the URL twice. Fix: encode at exactly one layer.\"}},\n{\"@type\":\"Question\",\"name\":\"Should I encode URL parameters before sending an HTTP request?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"If building with template literals, yes \u2014 wrap values in encodeURIComponent. If using fetch with URL\/URLSearchParams, encoding is automatic.\"}},\n{\"@type\":\"Question\",\"name\":\"How do I encode emoji or non-Latin characters?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use UTF-8 (default in modern JS and Python). Emoji become multi-byte sequences like %F0%9F%8E%89 for \ud83c\udf89.\"}},\n{\"@type\":\"Question\",\"name\":\"Is my URL data uploaded?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. The encoder\/decoder runs in your browser. URLs and tokens are never sent to our servers.\"}},\n{\"@type\":\"Question\",\"name\":\"What's the difference between URL encoding and Base64 encoding?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"URL encoding makes strings safe inside URLs. Base64 makes binary data fit text-only formats. Sometimes combined \u2014 Base64URL is the URL-safe variant.\"}}\n]}<\/script><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Encode and decode URLs the right way. Component vs full URL, RFC 3986 reserved characters, double-encoding fixes, UTF-8 safe. Browser-only, paste any size.<\/p>\n","protected":false},"author":2,"featured_media":102,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60,6],"tags":[61,68,70],"class_list":["post-103","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-coding-tools","category-tutorials","tag-coding-tools","tag-developers","tag-web"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>URL Encoder\/Decoder: Percent-Encode Safely [2026]<\/title>\n<meta name=\"description\" content=\"Encode and decode URLs the right way. Component vs full URL, RFC 3986 reserved characters, double-encoding fixes, UTF-8 safe. Browser-only, paste any size.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"URL Encoder\/Decoder: Percent-Encode Safely [2026]\" \/>\n<meta property=\"og:description\" content=\"Encode and decode URLs the right way. Component vs full URL, RFC 3986 reserved characters, double-encoding fixes, UTF-8 safe. Browser-only, paste any size.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/\" \/>\n<meta property=\"og:site_name\" content=\"SimpleTool\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-04T23:21:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/url-encoder-decoder.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Simple Tool\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Simple Tool\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/\"},\"author\":{\"name\":\"Simple Tool\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/#\\\/schema\\\/person\\\/38da26da1ab731dd1b80f05ee75edcca\"},\"headline\":\"URL Encoder\\\/Decoder: Percent-Encode Safely [2026]\",\"datePublished\":\"2026-05-04T23:21:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/\"},\"wordCount\":1082,\"image\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/url-encoder-decoder.png\",\"keywords\":[\"Coding Tools\",\"Developers\",\"Web\"],\"articleSection\":[\"Coding Tools\",\"Tutorials\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/\",\"url\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/\",\"name\":\"URL Encoder\\\/Decoder: Percent-Encode Safely [2026]\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/url-encoder-decoder.png\",\"datePublished\":\"2026-05-04T23:21:29+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/#\\\/schema\\\/person\\\/38da26da1ab731dd1b80f05ee75edcca\"},\"description\":\"Encode and decode URLs the right way. Component vs full URL, RFC 3986 reserved characters, double-encoding fixes, UTF-8 safe. Browser-only, paste any size.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/#primaryimage\",\"url\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/url-encoder-decoder.png\",\"contentUrl\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/url-encoder-decoder.png\",\"width\":1200,\"height\":630,\"caption\":\"URL Encoder Decoder featured graphic showing 'hello world & more' encoded as 'helloworldmore'\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/url-encoder-decoder\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"URL Encoder\\\/Decoder: Percent-Encode Safely [2026]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/\",\"name\":\"SimpleTool\",\"description\":\"Always Simple, Always Free\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/#\\\/schema\\\/person\\\/38da26da1ab731dd1b80f05ee75edcca\",\"name\":\"Simple Tool\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g\",\"caption\":\"Simple Tool\"},\"sameAs\":[\"https:\\\/\\\/simpletool.io\"],\"url\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/author\\\/simpletoolio\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"URL Encoder\/Decoder: Percent-Encode Safely [2026]","description":"Encode and decode URLs the right way. Component vs full URL, RFC 3986 reserved characters, double-encoding fixes, UTF-8 safe. Browser-only, paste any size.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/","og_locale":"en_US","og_type":"article","og_title":"URL Encoder\/Decoder: Percent-Encode Safely [2026]","og_description":"Encode and decode URLs the right way. Component vs full URL, RFC 3986 reserved characters, double-encoding fixes, UTF-8 safe. Browser-only, paste any size.","og_url":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/","og_site_name":"SimpleTool","article_published_time":"2026-05-04T23:21:29+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/url-encoder-decoder.png","type":"image\/png"}],"author":"Simple Tool","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Simple Tool","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/#article","isPartOf":{"@id":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/"},"author":{"name":"Simple Tool","@id":"https:\/\/simpletool.io\/blog\/#\/schema\/person\/38da26da1ab731dd1b80f05ee75edcca"},"headline":"URL Encoder\/Decoder: Percent-Encode Safely [2026]","datePublished":"2026-05-04T23:21:29+00:00","mainEntityOfPage":{"@id":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/"},"wordCount":1082,"image":{"@id":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/#primaryimage"},"thumbnailUrl":"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/url-encoder-decoder.png","keywords":["Coding Tools","Developers","Web"],"articleSection":["Coding Tools","Tutorials"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/","url":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/","name":"URL Encoder\/Decoder: Percent-Encode Safely [2026]","isPartOf":{"@id":"https:\/\/simpletool.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/#primaryimage"},"image":{"@id":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/#primaryimage"},"thumbnailUrl":"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/url-encoder-decoder.png","datePublished":"2026-05-04T23:21:29+00:00","author":{"@id":"https:\/\/simpletool.io\/blog\/#\/schema\/person\/38da26da1ab731dd1b80f05ee75edcca"},"description":"Encode and decode URLs the right way. Component vs full URL, RFC 3986 reserved characters, double-encoding fixes, UTF-8 safe. Browser-only, paste any size.","breadcrumb":{"@id":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/simpletool.io\/blog\/url-encoder-decoder\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/#primaryimage","url":"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/url-encoder-decoder.png","contentUrl":"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/url-encoder-decoder.png","width":1200,"height":630,"caption":"URL Encoder Decoder featured graphic showing 'hello world & more' encoded as 'helloworldmore'"},{"@type":"BreadcrumbList","@id":"https:\/\/simpletool.io\/blog\/url-encoder-decoder\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/simpletool.io\/blog\/"},{"@type":"ListItem","position":2,"name":"URL Encoder\/Decoder: Percent-Encode Safely [2026]"}]},{"@type":"WebSite","@id":"https:\/\/simpletool.io\/blog\/#website","url":"https:\/\/simpletool.io\/blog\/","name":"SimpleTool","description":"Always Simple, Always Free","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/simpletool.io\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/simpletool.io\/blog\/#\/schema\/person\/38da26da1ab731dd1b80f05ee75edcca","name":"Simple Tool","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g","caption":"Simple Tool"},"sameAs":["https:\/\/simpletool.io"],"url":"https:\/\/simpletool.io\/blog\/author\/simpletoolio\/"}]}},"_links":{"self":[{"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/posts\/103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/comments?post=103"}],"version-history":[{"count":1,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/posts\/103\/revisions"}],"predecessor-version":[{"id":121,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/posts\/103\/revisions\/121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/media\/102"}],"wp:attachment":[{"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/media?parent=103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/categories?post=103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/tags?post=103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}