[{"data":1,"prerenderedAt":948},["ShallowReactive",2],{"guide-common-url-encoding-mistakes":3},{"id":4,"title":5,"body":6,"date":940,"description":941,"extension":942,"meta":943,"navigation":84,"path":944,"readingTime":114,"seo":945,"stem":946,"__hash__":947},"guides\u002Fguides\u002Fcommon-url-encoding-mistakes.md","Common URL Encoding Mistakes and How to Fix Them",{"type":7,"value":8,"toc":921},"minimark",[9,14,18,22,27,39,141,145,148,161,165,168,254,258,262,265,332,415,419,432,521,524,528,531,545,616,625,628,644,648,654,781,785,788,853,856,860,899,903,912,917],[10,11,13],"h2",{"id":12},"url-encoding-errors-break-things-quietly","URL Encoding Errors Break Things Quietly",[15,16,17],"p",{},"URL encoding mistakes rarely throw obvious errors. Instead, they produce broken links, missing query parameters, corrupted file downloads, or authentication failures that are difficult to trace. Understanding the common pitfalls helps you write correct URL-handling code from the start.",[10,19,21],{"id":20},"mistake-1-double-encoding","Mistake 1: Double Encoding",[23,24,26],"h3",{"id":25},"how-it-happens","How It Happens",[15,28,29,30,34,35,38],{},"Double encoding occurs when you encode a string that already contains percent-encoded sequences. The ",[31,32,33],"code",{},"%"," characters in the existing encoding get encoded again as ",[31,36,37],{},"%25",":",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F Original string\nconst city = 'São Paulo';\n\n\u002F\u002F First encoding (correct)\nconst encoded = encodeURIComponent(city); \u002F\u002F \"S%C3%A3o%20Paulo\"\n\n\u002F\u002F Second encoding (broken)\nconst doubleEncoded = encodeURIComponent(encoded); \u002F\u002F \"S%25C3%25A3o%2520Paulo\"\n","javascript","",[31,47,48,57,79,86,92,112,117,123],{"__ignoreMap":45},[49,50,53],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"sJ8bj","\u002F\u002F Original string\n",[49,58,60,64,68,71,75],{"class":51,"line":59},2,[49,61,63],{"class":62},"szBVR","const",[49,65,67],{"class":66},"sj4cs"," city",[49,69,70],{"class":62}," =",[49,72,74],{"class":73},"sZZnC"," 'São Paulo'",[49,76,78],{"class":77},"sVt8B",";\n",[49,80,82],{"class":51,"line":81},3,[49,83,85],{"emptyLinePlaceholder":84},true,"\n",[49,87,89],{"class":51,"line":88},4,[49,90,91],{"class":55},"\u002F\u002F First encoding (correct)\n",[49,93,95,97,100,102,106,109],{"class":51,"line":94},5,[49,96,63],{"class":62},[49,98,99],{"class":66}," encoded",[49,101,70],{"class":62},[49,103,105],{"class":104},"sScJk"," encodeURIComponent",[49,107,108],{"class":77},"(city); ",[49,110,111],{"class":55},"\u002F\u002F \"S%C3%A3o%20Paulo\"\n",[49,113,115],{"class":51,"line":114},6,[49,116,85],{"emptyLinePlaceholder":84},[49,118,120],{"class":51,"line":119},7,[49,121,122],{"class":55},"\u002F\u002F Second encoding (broken)\n",[49,124,126,128,131,133,135,138],{"class":51,"line":125},8,[49,127,63],{"class":62},[49,129,130],{"class":66}," doubleEncoded",[49,132,70],{"class":62},[49,134,105],{"class":104},[49,136,137],{"class":77},"(encoded); ",[49,139,140],{"class":55},"\u002F\u002F \"S%25C3%25A3o%2520Paulo\"\n",[23,142,144],{"id":143},"where-it-creeps-in","Where It Creeps In",[15,146,147],{},"Double encoding often appears when multiple layers of a stack each apply encoding:",[149,150,151,155,158],"ul",{},[152,153,154],"li",{},"A client library encodes a parameter, then the HTTP client encodes it again",[152,156,157],{},"A template engine URL-encodes a value that was already encoded in the controller",[152,159,160],{},"A redirect URL includes encoded query parameters, and the redirect handler encodes the entire URL",[23,162,164],{"id":163},"the-fix","The Fix",[15,166,167],{},"Decode before re-encoding, or encode only once at the boundary where the URL is constructed:",[40,169,171],{"className":42,"code":170,"language":44,"meta":45,"style":45},"\u002F\u002F Safe: encode only at the final construction point\nconst url = `https:\u002F\u002Fapi.example.com\u002Fsearch?q=${encodeURIComponent(rawQuery)}`;\n\n\u002F\u002F If you receive a pre-encoded value, decode it first\nconst decoded = decodeURIComponent(receivedValue);\nconst url = `https:\u002F\u002Fapi.example.com\u002Fsearch?q=${encodeURIComponent(decoded)}`;\n",[31,172,173,178,207,211,216,231],{"__ignoreMap":45},[49,174,175],{"class":51,"line":52},[49,176,177],{"class":55},"\u002F\u002F Safe: encode only at the final construction point\n",[49,179,180,182,185,187,190,193,196,199,202,205],{"class":51,"line":59},[49,181,63],{"class":62},[49,183,184],{"class":66}," url",[49,186,70],{"class":62},[49,188,189],{"class":73}," `https:\u002F\u002Fapi.example.com\u002Fsearch?q=${",[49,191,192],{"class":104},"encodeURIComponent",[49,194,195],{"class":73},"(",[49,197,198],{"class":77},"rawQuery",[49,200,201],{"class":73},")",[49,203,204],{"class":73},"}`",[49,206,78],{"class":77},[49,208,209],{"class":51,"line":81},[49,210,85],{"emptyLinePlaceholder":84},[49,212,213],{"class":51,"line":88},[49,214,215],{"class":55},"\u002F\u002F If you receive a pre-encoded value, decode it first\n",[49,217,218,220,223,225,228],{"class":51,"line":94},[49,219,63],{"class":62},[49,221,222],{"class":66}," decoded",[49,224,70],{"class":62},[49,226,227],{"class":104}," decodeURIComponent",[49,229,230],{"class":77},"(receivedValue);\n",[49,232,233,235,237,239,241,243,245,248,250,252],{"class":51,"line":114},[49,234,63],{"class":62},[49,236,184],{"class":66},[49,238,70],{"class":62},[49,240,189],{"class":73},[49,242,192],{"class":104},[49,244,195],{"class":73},[49,246,247],{"class":77},"decoded",[49,249,201],{"class":73},[49,251,204],{"class":73},[49,253,78],{"class":77},[10,255,257],{"id":256},"mistake-2-using-the-wrong-encoding-function","Mistake 2: Using the Wrong Encoding Function",[23,259,261],{"id":260},"encodeuri-vs-encodeuricomponent","encodeURI vs encodeURIComponent",[15,263,264],{},"These two functions encode different character sets, and using the wrong one breaks URLs in predictable ways:",[40,266,268],{"className":42,"code":267,"language":44,"meta":45,"style":45},"const url = 'https:\u002F\u002Fexample.com\u002Fpath?name=John Doe&city=New York';\n\n\u002F\u002F encodeURI preserves URL structure — use for full URLs\nencodeURI(url);\n\u002F\u002F \"https:\u002F\u002Fexample.com\u002Fpath?name=John%20Doe&city=New%20York\"\n\n\u002F\u002F encodeURIComponent encodes everything — use for parameter values only\nencodeURIComponent(url);\n\u002F\u002F \"https%3A%2F%2Fexample.com%2Fpath%3Fname%3DJohn%20Doe%26city%3DNew%20York\"\n\u002F\u002F ↑ Broken: :, \u002F, ?, & are all encoded\n",[31,269,270,283,287,292,300,305,309,314,320,326],{"__ignoreMap":45},[49,271,272,274,276,278,281],{"class":51,"line":52},[49,273,63],{"class":62},[49,275,184],{"class":66},[49,277,70],{"class":62},[49,279,280],{"class":73}," 'https:\u002F\u002Fexample.com\u002Fpath?name=John Doe&city=New York'",[49,282,78],{"class":77},[49,284,285],{"class":51,"line":59},[49,286,85],{"emptyLinePlaceholder":84},[49,288,289],{"class":51,"line":81},[49,290,291],{"class":55},"\u002F\u002F encodeURI preserves URL structure — use for full URLs\n",[49,293,294,297],{"class":51,"line":88},[49,295,296],{"class":104},"encodeURI",[49,298,299],{"class":77},"(url);\n",[49,301,302],{"class":51,"line":94},[49,303,304],{"class":55},"\u002F\u002F \"https:\u002F\u002Fexample.com\u002Fpath?name=John%20Doe&city=New%20York\"\n",[49,306,307],{"class":51,"line":114},[49,308,85],{"emptyLinePlaceholder":84},[49,310,311],{"class":51,"line":119},[49,312,313],{"class":55},"\u002F\u002F encodeURIComponent encodes everything — use for parameter values only\n",[49,315,316,318],{"class":51,"line":125},[49,317,192],{"class":104},[49,319,299],{"class":77},[49,321,323],{"class":51,"line":322},9,[49,324,325],{"class":55},"\u002F\u002F \"https%3A%2F%2Fexample.com%2Fpath%3Fname%3DJohn%20Doe%26city%3DNew%20York\"\n",[49,327,329],{"class":51,"line":328},10,[49,330,331],{"class":55},"\u002F\u002F ↑ Broken: :, \u002F, ?, & are all encoded\n",[333,334,335,351],"table",{},[336,337,338],"thead",{},[339,340,341,345,348],"tr",{},[342,343,344],"th",{},"Scenario",[342,346,347],{},"Correct Function",[342,349,350],{},"Why",[352,353,354,382,401],"tbody",{},[339,355,356,360,364],{},[357,358,359],"td",{},"Building a full URL",[357,361,362],{},[31,363,296],{},[357,365,366,367,369,370,369,373,369,376,369,379],{},"Preserves ",[31,368,38],{},", ",[31,371,372],{},"\u002F",[31,374,375],{},"?",[31,377,378],{},"#",[31,380,381],{},"&",[339,383,384,387,391],{},[357,385,386],{},"Encoding a query parameter value",[357,388,389],{},[31,390,192],{},[357,392,393,394,396,397,400],{},"Encodes ",[31,395,381],{}," and ",[31,398,399],{},"="," to avoid parameter injection",[339,402,403,406,410],{},[357,404,405],{},"Encoding a path segment",[357,407,408],{},[31,409,192],{},[357,411,393,412,414],{},[31,413,372],{}," to avoid path traversal",[10,416,418],{"id":417},"mistake-3-not-encoding-reserved-characters-in-user-input","Mistake 3: Not Encoding Reserved Characters in User Input",[15,420,421,422,369,424,369,426,428,429,431],{},"Reserved characters like ",[31,423,381],{},[31,425,399],{},[31,427,378],{},", and ",[31,430,375],{}," have special meaning in URLs. When user input contains these characters unencoded, the URL structure breaks:",[40,433,435],{"className":42,"code":434,"language":44,"meta":45,"style":45},"\u002F\u002F User searches for \"AT&T\"\nconst query = 'AT&T';\nconst url = `https:\u002F\u002Fexample.com\u002Fsearch?q=${query}`;\n\u002F\u002F Results in: https:\u002F\u002Fexample.com\u002Fsearch?q=AT&T\n\u002F\u002F Server reads q=\"AT\" and an empty parameter \"T\"\n\n\u002F\u002F Correct\nconst safeUrl = `https:\u002F\u002Fexample.com\u002Fsearch?q=${encodeURIComponent(query)}`;\n\u002F\u002F Results in: https:\u002F\u002Fexample.com\u002Fsearch?q=AT%26T\n",[31,436,437,442,456,474,479,484,488,493,516],{"__ignoreMap":45},[49,438,439],{"class":51,"line":52},[49,440,441],{"class":55},"\u002F\u002F User searches for \"AT&T\"\n",[49,443,444,446,449,451,454],{"class":51,"line":59},[49,445,63],{"class":62},[49,447,448],{"class":66}," query",[49,450,70],{"class":62},[49,452,453],{"class":73}," 'AT&T'",[49,455,78],{"class":77},[49,457,458,460,462,464,467,470,472],{"class":51,"line":81},[49,459,63],{"class":62},[49,461,184],{"class":66},[49,463,70],{"class":62},[49,465,466],{"class":73}," `https:\u002F\u002Fexample.com\u002Fsearch?q=${",[49,468,469],{"class":77},"query",[49,471,204],{"class":73},[49,473,78],{"class":77},[49,475,476],{"class":51,"line":88},[49,477,478],{"class":55},"\u002F\u002F Results in: https:\u002F\u002Fexample.com\u002Fsearch?q=AT&T\n",[49,480,481],{"class":51,"line":94},[49,482,483],{"class":55},"\u002F\u002F Server reads q=\"AT\" and an empty parameter \"T\"\n",[49,485,486],{"class":51,"line":114},[49,487,85],{"emptyLinePlaceholder":84},[49,489,490],{"class":51,"line":119},[49,491,492],{"class":55},"\u002F\u002F Correct\n",[49,494,495,497,500,502,504,506,508,510,512,514],{"class":51,"line":125},[49,496,63],{"class":62},[49,498,499],{"class":66}," safeUrl",[49,501,70],{"class":62},[49,503,466],{"class":73},[49,505,192],{"class":104},[49,507,195],{"class":73},[49,509,469],{"class":77},[49,511,201],{"class":73},[49,513,204],{"class":73},[49,515,78],{"class":77},[49,517,518],{"class":51,"line":322},[49,519,520],{"class":55},"\u002F\u002F Results in: https:\u002F\u002Fexample.com\u002Fsearch?q=AT%26T\n",[15,522,523],{},"This mistake enables parameter injection attacks when unsanitized user input creates URLs.",[10,525,527],{"id":526},"mistake-4-encoding-spaces-incorrectly","Mistake 4: Encoding Spaces Incorrectly",[15,529,530],{},"URLs represent spaces in two ways:",[149,532,533,539],{},[152,534,535,538],{},[31,536,537],{},"%20"," — percent-encoding (standard)",[152,540,541,544],{},[31,542,543],{},"+"," — application\u002Fx-www-form-urlencoded encoding (form submissions)",[40,546,548],{"className":42,"code":547,"language":44,"meta":45,"style":45},"\u002F\u002F encodeURIComponent uses %20\nencodeURIComponent('hello world'); \u002F\u002F \"hello%20world\"\n\n\u002F\u002F Form encoding uses +\nconst formData = new URLSearchParams({ q: 'hello world' });\nformData.toString(); \u002F\u002F \"q=hello+world\"\n",[31,549,550,555,570,574,579,602],{"__ignoreMap":45},[49,551,552],{"class":51,"line":52},[49,553,554],{"class":55},"\u002F\u002F encodeURIComponent uses %20\n",[49,556,557,559,561,564,567],{"class":51,"line":59},[49,558,192],{"class":104},[49,560,195],{"class":77},[49,562,563],{"class":73},"'hello world'",[49,565,566],{"class":77},"); ",[49,568,569],{"class":55},"\u002F\u002F \"hello%20world\"\n",[49,571,572],{"class":51,"line":81},[49,573,85],{"emptyLinePlaceholder":84},[49,575,576],{"class":51,"line":88},[49,577,578],{"class":55},"\u002F\u002F Form encoding uses +\n",[49,580,581,583,586,588,591,594,597,599],{"class":51,"line":94},[49,582,63],{"class":62},[49,584,585],{"class":66}," formData",[49,587,70],{"class":62},[49,589,590],{"class":62}," new",[49,592,593],{"class":104}," URLSearchParams",[49,595,596],{"class":77},"({ q: ",[49,598,563],{"class":73},[49,600,601],{"class":77}," });\n",[49,603,604,607,610,613],{"class":51,"line":114},[49,605,606],{"class":77},"formData.",[49,608,609],{"class":104},"toString",[49,611,612],{"class":77},"(); ",[49,614,615],{"class":55},"\u002F\u002F \"q=hello+world\"\n",[15,617,618,619,621,622,624],{},"Mixing these conventions causes mismatches. A server expecting ",[31,620,537],{}," may treat ",[31,623,543],{}," as a literal plus sign, and vice versa.",[23,626,164],{"id":627},"the-fix-1",[15,629,630,631,633,634,637,638,640,641,643],{},"Use ",[31,632,192],{}," for URL path segments and query parameters in API calls. Use ",[31,635,636],{},"URLSearchParams"," for form-encoded request bodies. Never substitute ",[31,639,543],{}," for ",[31,642,537],{}," manually.",[10,645,647],{"id":646},"mistake-5-encoding-the-entire-url-at-once","Mistake 5: Encoding the Entire URL at Once",[15,649,650,651,653],{},"Encoding a complete URL with ",[31,652,192],{}," makes it unusable — the protocol, host, and path separators all get encoded:",[40,655,657],{"className":42,"code":656,"language":44,"meta":45,"style":45},"\u002F\u002F Broken approach\nconst fullUrl = 'https:\u002F\u002Fapi.example.com\u002Fusers?role=admin&page=1';\nconst encoded = encodeURIComponent(fullUrl);\n\u002F\u002F \"https%3A%2F%2Fapi.example.com%2Fusers%3Frole%3Dadmin%26page%3D1\"\n\u002F\u002F Cannot be used as a valid URL\n\n\u002F\u002F Correct: encode components individually\nconst base = 'https:\u002F\u002Fapi.example.com\u002Fusers';\nconst params = new URLSearchParams({ role: 'admin', page: '1' });\nconst url = `${base}?${params}`;\n\u002F\u002F \"https:\u002F\u002Fapi.example.com\u002Fusers?role=admin&page=1\"\n",[31,658,659,664,678,691,696,701,705,710,724,751,775],{"__ignoreMap":45},[49,660,661],{"class":51,"line":52},[49,662,663],{"class":55},"\u002F\u002F Broken approach\n",[49,665,666,668,671,673,676],{"class":51,"line":59},[49,667,63],{"class":62},[49,669,670],{"class":66}," fullUrl",[49,672,70],{"class":62},[49,674,675],{"class":73}," 'https:\u002F\u002Fapi.example.com\u002Fusers?role=admin&page=1'",[49,677,78],{"class":77},[49,679,680,682,684,686,688],{"class":51,"line":81},[49,681,63],{"class":62},[49,683,99],{"class":66},[49,685,70],{"class":62},[49,687,105],{"class":104},[49,689,690],{"class":77},"(fullUrl);\n",[49,692,693],{"class":51,"line":88},[49,694,695],{"class":55},"\u002F\u002F \"https%3A%2F%2Fapi.example.com%2Fusers%3Frole%3Dadmin%26page%3D1\"\n",[49,697,698],{"class":51,"line":94},[49,699,700],{"class":55},"\u002F\u002F Cannot be used as a valid URL\n",[49,702,703],{"class":51,"line":114},[49,704,85],{"emptyLinePlaceholder":84},[49,706,707],{"class":51,"line":119},[49,708,709],{"class":55},"\u002F\u002F Correct: encode components individually\n",[49,711,712,714,717,719,722],{"class":51,"line":125},[49,713,63],{"class":62},[49,715,716],{"class":66}," base",[49,718,70],{"class":62},[49,720,721],{"class":73}," 'https:\u002F\u002Fapi.example.com\u002Fusers'",[49,723,78],{"class":77},[49,725,726,728,731,733,735,737,740,743,746,749],{"class":51,"line":322},[49,727,63],{"class":62},[49,729,730],{"class":66}," params",[49,732,70],{"class":62},[49,734,590],{"class":62},[49,736,593],{"class":104},[49,738,739],{"class":77},"({ role: ",[49,741,742],{"class":73},"'admin'",[49,744,745],{"class":77},", page: ",[49,747,748],{"class":73},"'1'",[49,750,601],{"class":77},[49,752,753,755,757,759,762,765,768,771,773],{"class":51,"line":328},[49,754,63],{"class":62},[49,756,184],{"class":66},[49,758,70],{"class":62},[49,760,761],{"class":73}," `${",[49,763,764],{"class":77},"base",[49,766,767],{"class":73},"}?${",[49,769,770],{"class":77},"params",[49,772,204],{"class":73},[49,774,78],{"class":77},[49,776,778],{"class":51,"line":777},11,[49,779,780],{"class":55},"\u002F\u002F \"https:\u002F\u002Fapi.example.com\u002Fusers?role=admin&page=1\"\n",[10,782,784],{"id":783},"mistake-6-assuming-url-encoding-is-encryption","Mistake 6: Assuming URL Encoding Is Encryption",[15,786,787],{},"Percent-encoding is trivially reversible. It provides zero confidentiality:",[40,789,791],{"className":42,"code":790,"language":44,"meta":45,"style":45},"\u002F\u002F \"Encrypted\" with URL encoding — trivially decoded\nconst encoded = encodeURIComponent('password123'); \u002F\u002F \"password123\"\n\u002F\u002F ↑ Same string, no encoding needed for ASCII chars\n\nconst encodedInt = encodeURIComponent('sëcrët'); \u002F\u002F \"s%C3%ABcr%C3%ABt\"\n\u002F\u002F Decode: decodeURIComponent(\"s%C3%ABcr%C3%ABt\") → \"sëcrët\"\n",[31,792,793,798,818,823,827,848],{"__ignoreMap":45},[49,794,795],{"class":51,"line":52},[49,796,797],{"class":55},"\u002F\u002F \"Encrypted\" with URL encoding — trivially decoded\n",[49,799,800,802,804,806,808,810,813,815],{"class":51,"line":59},[49,801,63],{"class":62},[49,803,99],{"class":66},[49,805,70],{"class":62},[49,807,105],{"class":104},[49,809,195],{"class":77},[49,811,812],{"class":73},"'password123'",[49,814,566],{"class":77},[49,816,817],{"class":55},"\u002F\u002F \"password123\"\n",[49,819,820],{"class":51,"line":81},[49,821,822],{"class":55},"\u002F\u002F ↑ Same string, no encoding needed for ASCII chars\n",[49,824,825],{"class":51,"line":88},[49,826,85],{"emptyLinePlaceholder":84},[49,828,829,831,834,836,838,840,843,845],{"class":51,"line":94},[49,830,63],{"class":62},[49,832,833],{"class":66}," encodedInt",[49,835,70],{"class":62},[49,837,105],{"class":104},[49,839,195],{"class":77},[49,841,842],{"class":73},"'sëcrët'",[49,844,566],{"class":77},[49,846,847],{"class":55},"\u002F\u002F \"s%C3%ABcr%C3%ABt\"\n",[49,849,850],{"class":51,"line":114},[49,851,852],{"class":55},"\u002F\u002F Decode: decodeURIComponent(\"s%C3%ABcr%C3%ABt\") → \"sëcrët\"\n",[15,854,855],{},"Never use URL encoding as a security measure. Use TLS for data in transit and encryption for sensitive values.",[10,857,859],{"id":858},"key-takeaways","Key Takeaways",[149,861,862,873,881,884,893,896],{},[152,863,864,865,868,869,872],{},"Double encoding turns ",[31,866,867],{},"%XX"," into ",[31,870,871],{},"%25XX"," — decode before re-encoding",[152,874,630,875,877,878,880],{},[31,876,192],{}," for parameter values, ",[31,879,296],{}," for full URLs",[152,882,883],{},"Reserved characters in user input must be encoded to prevent parameter injection",[152,885,886,887,889,890,892],{},"Spaces are ",[31,888,537],{}," in URLs but ",[31,891,543],{}," in form encoding — know which context you are in",[152,894,895],{},"Encode URL components individually, never the entire URL string",[152,897,898],{},"URL encoding is not encryption — it is trivially reversible",[10,900,902],{"id":901},"try-it-yourself","Try It Yourself",[15,904,905,906,911],{},"Encode and decode URLs correctly with our free ",[907,908,910],"a",{"href":909},"\u002Ftools\u002Furl-encoder","URL Encoder",". Paste any text to see its percent-encoded form, or paste an encoded URL to decode it — all processing happens locally in your browser.",[15,913,914],{},[907,915,916],{"href":909},"Try the URL Encoder →",[918,919,920],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":45,"searchDepth":59,"depth":59,"links":922},[923,924,929,932,933,936,937,938,939],{"id":12,"depth":59,"text":13},{"id":20,"depth":59,"text":21,"children":925},[926,927,928],{"id":25,"depth":81,"text":26},{"id":143,"depth":81,"text":144},{"id":163,"depth":81,"text":164},{"id":256,"depth":59,"text":257,"children":930},[931],{"id":260,"depth":81,"text":261},{"id":417,"depth":59,"text":418},{"id":526,"depth":59,"text":527,"children":934},[935],{"id":627,"depth":81,"text":164},{"id":646,"depth":59,"text":647},{"id":783,"depth":59,"text":784},{"id":858,"depth":59,"text":859},{"id":901,"depth":59,"text":902},"2026-05-28","Avoid the most frequent URL encoding errors. Learn about double encoding, reserved character mishandling, and encoding order bugs.","md",{"immutable":84},"\u002Fguides\u002Fcommon-url-encoding-mistakes",{"title":5,"description":941},"guides\u002Fcommon-url-encoding-mistakes","mcxhFVZgmUIf8kwnqPsl9IHfeKbnKRZmM-ejcaIOFNY",1780401332290]