ConverterCreatedTuesday, October 29, 2024 at 9:54:44 PMDescriptionSVG XML comments and scriptAuthorhackvertorArrayjsArrayshufflesortuniqueCharsetsbomiso2022EscapesoverlongUTF8unicodeNormalizationunicodeTruncationus_asciiencodedecodedecode → encodeutf16encodedecodedecode → encodeutf16BEencodedecodedecode → encodeutf16LEencodedecodedecode → encodeutf7encodedecodedecode → encodeutf8BytesHexCheckscontainscheckequalscheckisJsoncheckisNumericcheckCompressiondeflateencodedecodedecode → encodegzipencodedecodedecode → encoderawDeflateencodedecodedecode → encodeConvertaiautodecodebase32encodedecodedecode → encodebase58encodedecodedecode → encodebase62encodedecodedecode → encodebase64encodedecodedecode → encodebase64Urlencodedecodedecode → encodebase85encodedecodedecode → encodebase91encodedecodedecode → encodebinaryencodedecodedecode → encodecssEscapeencodedecodedecode → encodedecencodedecodedecode → encodeextractAsciifullWidthhexencodedecodedecode → encodehexBytesencodedecodedecode → encodehexEscapeencodedecodedecode → encodehexSpaceencodedecodedecode → encodehtmlencodedecodedecode → encodeinvisibleUnicodeencodedecodedecode → encodejsjsAsyncmalformedUrlencodedecodedecode → encodeoctalencodedecodedecode → encodephpChrencodedecodedecode → encodepunycodeencodedecodedecode → encodetemplateStringExpressionunicodeencodedecodedecode → encodeunicodeEs6encodedecodedecode → encodeurlencodedecodedecode → encodeurl_allencodedecodedecode → encodezalgozbase32encodedecodedecode → encodeEmailencodedWordencodedecodedecode → encodeencodedWordMetapercentRoutepunyCommaSplitpunyStyleOpensmtpParametersunicodeOverflowunicodeOverflowVariationsuucpBangEncryptrot13rot47xorHashintegritymd4md5shaIPdword2iphex2ipip2dwordip2hexip2octoct2ipMathbasepermuterangeSQLisqlCharencodedecodedecode → encodesqlChrencodedecodedecode → encodesqlHexStringcapitalisefindfromCodePointlengthlowerpadStartprefixSuffixrepeatreplaceAllreplaceAllRegexreversesplitJointoCodePointupperUnicodeinvisibleSeparatorleftToRightOverridelineSeparatornextLineCharparagraphSeparatorrightToLeftOverridestrikethroughunicodeEffectunicodeWhitespaceupsideDownUnicodeencodedecodedecode → encodewordJoinerzeroWidthJoinerzeroWidthNoBreakSpacezeroWidthNonJoinerzeroWidthSpaceUtilsformatJsonVariablesgetVariablesetVariableXMLformatXmlnestxmlEntityxmlToJsonXSScdataevalFromCodePointhasegawajsFuckmathmlrestrictedVectorssvgsvgScriptCommentternarytoStringObfuscatorvectorsArrayjsArrayshufflesortuniqueCharsetsbomiso2022EscapesoverlongUTF8unicodeNormalizationunicodeTruncationus_asciiencodedecodedecode → encodeutf16encodedecodedecode → encodeutf16BEencodedecodedecode → encodeutf16LEencodedecodedecode → encodeutf7encodedecodedecode → encodeutf8BytesHexCheckscontainscheckequalscheckisJsoncheckisNumericcheckCompressiondeflateencodedecodedecode → encodegzipencodedecodedecode → encoderawDeflateencodedecodedecode → encodeConvertaiautodecodebase32encodedecodedecode → encodebase58encodedecodedecode → encodebase62encodedecodedecode → encodebase64encodedecodedecode → encodebase64Urlencodedecodedecode → encodebase85encodedecodedecode → encodebase91encodedecodedecode → encodebinaryencodedecodedecode → encodecssEscapeencodedecodedecode → encodedecencodedecodedecode → encodeextractAsciifullWidthhexencodedecodedecode → encodehexBytesencodedecodedecode → encodehexEscapeencodedecodedecode → encodehexSpaceencodedecodedecode → encodehtmlencodedecodedecode → encodeinvisibleUnicodeencodedecodedecode → encodejsjsAsyncmalformedUrlencodedecodedecode → encodeoctalencodedecodedecode → encodephpChrencodedecodedecode → encodepunycodeencodedecodedecode → encodetemplateStringExpressionunicodeencodedecodedecode → encodeunicodeEs6encodedecodedecode → encodeurlencodedecodedecode → encodeurl_allencodedecodedecode → encodezalgozbase32encodedecodedecode → encodeEmailencodedWordencodedecodedecode → encodeencodedWordMetapercentRoutepunyCommaSplitpunyStyleOpensmtpParametersunicodeOverflowunicodeOverflowVariationsuucpBangEncryptrot13rot47xorHashintegritymd4md5shaIPdword2iphex2ipip2dwordip2hexip2octoct2ipMathbasepermuterangeSQLisqlCharencodedecodedecode → encodesqlChrencodedecodedecode → encodesqlHexStringcapitalisefindfromCodePointlengthlowerpadStartprefixSuffixrepeatreplaceAllreplaceAllRegexreversesplitJointoCodePointupperUnicodeinvisibleSeparatorleftToRightOverridelineSeparatornextLineCharparagraphSeparatorrightToLeftOverridestrikethroughunicodeEffectunicodeWhitespaceupsideDownUnicodeencodedecodedecode → encodewordJoinerzeroWidthJoinerzeroWidthNoBreakSpacezeroWidthNonJoinerzeroWidthSpaceUtilsformatJsonVariablesgetVariablesetVariableXMLformatXmlnestxmlEntityxmlToJsonXSScdataevalFromCodePointhasegawajsFuckmathmlrestrictedVectorssvgsvgScriptCommentternarytoStringObfuscatorvectorsInput:0 0&&||ExamplesConditions with check tagsEncode only if JSONBase64-encodes the input when it is valid JSON, and outputs nothing otherwise.<@check(isJson)>{"a":1}</@check> && <@encode(base64)>{"a":1}</@encode>Fixed text either wayPlain text works as an operand: a check picks one of two fixed values.<@check(isJson)>{"a":1}</@check> && valid JSON || not JSONNumber or notisNumeric passes only for digits, so this outputs the second text.<@check(isNumeric)>13a37</@check> && number || not a numberCompare with equalsequals takes the text to compare against as an argument and passes on an exact match.<@check(equals,'admin')>admin</@check> && match || no matchLook for a substringcontains passes when its argument appears anywhere in the input.<@check(contains,'<script')><script>alert(1)</script></@check> && has script || cleanNegate a check! inverts a check, so this base64-encodes anything that is not a number.!<@check(isNumeric)>abc</@check> && <@encode(base64)>abc</@encode>Fallback when a tag failsA tag that throws counts as false, so || moves on to the fallback.<@check(isJson)>{}</@check> && <@decode(base64)>not base64!</@decode> || <@encode(base64)>fallback</@encode>&& binds tighter than ||Read as A || (B && C): the failed numeric check falls through to the JSON branch.<@check(isNumeric)>abc</@check> || <@check(isJson)>[1]</@check> && JSON listCondition inside a tagAn expression can sit inside another tag, so its result is encoded further.<@encode(base64)><@check(isJson)>{}</@check> && ok || nope</@encode>Variables, wired up in Jigsaw modeOne value, two encodingsA payload is set once and read by two rows, so two wires fan out from the set.<@encode(setVariable,'payload')><script>alert(1)</script></@encode><@encode(url)><@encode(getVariable,'payload') /></@encode><@encode(base64)><@encode(getVariable,'payload') /></@encode>Read before it is setgetVariable waits for its value, so the wire runs back from a set further down.<@encode(hex)><@encode(getVariable,'token') /></@encode><@encode(setVariable,'token')>secret</@encode>A variable in a conditionThe same value feeds the check and the tag it guards, so it is only written once.<@encode(setVariable,'data')>{"a":1}</@encode><@check(isJson)><@encode(getVariable,'data') /></@check> && <@encode(base64)><@encode(getVariable,'data') /></@encode>Request smuggling chunk sizeThe chunked size line is the stored request's length in hex, so both the size and the body wire back to the one set and stay right when you edit it.<@encode(setVariable,'chunk')>POST /404 HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: 15 x=1</@encode>POST / HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded Content-Length: 4 Transfer-Encoding: chunked <@encode(base,10,16)><@encode(length)><@encode(getVariable,'chunk') /></@encode></@encode> <@encode(getVariable,'chunk') /> 0 TagsJigsawOutput:0 0ClearClear tagsCopy as HTML← OutputSave recipeQR codeConvertAutodecoder↑ InputOptionsReal-time conversion (auto-convert when input changes)ExtrasDebugSelect inputSelect outputSend to HackPadSend to SnippetHistory«←(0/0)→»Clear historyJump to historyError!