ConverterCreatedThursday, July 24, 2025 at 8:12:43 AMDescriptionPersist extension dataAuthorhackvertorArrayjsArrayshufflesortuniqueCharsetsbomiso2022EscapesoverlongUTF8unicodeNormalizationunicodeOverflowunicodeOverflowVariationsunicodeTruncationus_asciiencodedecodedecode → encodeutf16encodedecodedecode → encodeutf16BEencodedecodedecode → encodeutf16LEencodedecodedecode → encodeutf7encodedecodedecode → encodeutf8BytesHexConvertautodecodebase32encodedecodedecode → encodebase58encodedecodedecode → encodebase62encodedecodedecode → encodebase64encodedecodedecode → encodebase64Urlencodedecodedecode → encodebase85encodedecodedecode → encodebase91encodedecodedecode → encodebinaryencodedecodedecode → encodecssEscapeencodedecodedecode → encodedecencodedecodedecode → encodeencodedWordencodedecodedecode → encodeencodedWordMetaextractAsciifullWidthhexencodedecodedecode → encodehexBytesencodedecodedecode → encodehexEscapeencodedecodedecode → encodehexSpaceencodedecodedecode → encodehtmlencodedecodedecode → encodejsjsAsyncmalformedUrlencodedecodedecode → encodeoctalencodedecodedecode → encodephpChrencodedecodedecode → encodepunycodeencodedecodedecode → encodetemplateStringExpressionunicodeencodedecodedecode → encodeunicodeEs6encodedecodedecode → encodeurlencodedecodedecode → encodezalgozbase32encodedecodedecode → encodeEncryptrot13rot47xorHashmd4md5shaIPdword2iphex2ipip2dwordip2hexip2octoct2ipMathbaserangeSQLisqlCharencodedecodedecode → encodesqlChrencodedecodedecode → encodesqlHexStringcapitalisefindfromCodePointinvisibleSeparatorleftToRightOverridelineSeparatorlowernextLineCharpadStartparagraphSeparatorrepeatreplaceAllreplaceAllRegexreverserightToLeftOverridesplitJointoCodePointunicodeWhitespaceupperwordJoinerzeroWidthJoinerzeroWidthNoBreakSpacezeroWidthNonJoinerzeroWidthSpaceUtilsformatJsonVariablesgetVariablesetVariableXMLformatXmlxmlEntityxmlToJsonXSScdataevalFromCodePointhasegawajsFuckmathmlrestrictedVectorssvgsvgScriptCommentternaryvectorsArrayjsArrayshufflesortuniqueCharsetsbomiso2022EscapesoverlongUTF8unicodeNormalizationunicodeOverflowunicodeOverflowVariationsunicodeTruncationus_asciiencodedecodedecode → encodeutf16encodedecodedecode → encodeutf16BEencodedecodedecode → encodeutf16LEencodedecodedecode → encodeutf7encodedecodedecode → encodeutf8BytesHexConvertautodecodebase32encodedecodedecode → encodebase58encodedecodedecode → encodebase62encodedecodedecode → encodebase64encodedecodedecode → encodebase64Urlencodedecodedecode → encodebase85encodedecodedecode → encodebase91encodedecodedecode → encodebinaryencodedecodedecode → encodecssEscapeencodedecodedecode → encodedecencodedecodedecode → encodeencodedWordencodedecodedecode → encodeencodedWordMetaextractAsciifullWidthhexencodedecodedecode → encodehexBytesencodedecodedecode → encodehexEscapeencodedecodedecode → encodehexSpaceencodedecodedecode → encodehtmlencodedecodedecode → encodejsjsAsyncmalformedUrlencodedecodedecode → encodeoctalencodedecodedecode → encodephpChrencodedecodedecode → encodepunycodeencodedecodedecode → encodetemplateStringExpressionunicodeencodedecodedecode → encodeunicodeEs6encodedecodedecode → encodeurlencodedecodedecode → encodezalgozbase32encodedecodedecode → encodeEncryptrot13rot47xorHashmd4md5shaIPdword2iphex2ipip2dwordip2hexip2octoct2ipMathbaserangeSQLisqlCharencodedecodedecode → encodesqlChrencodedecodedecode → encodesqlHexStringcapitalisefindfromCodePointinvisibleSeparatorleftToRightOverridelineSeparatorlowernextLineCharpadStartparagraphSeparatorrepeatreplaceAllreplaceAllRegexreverserightToLeftOverridesplitJointoCodePointunicodeWhitespaceupperwordJoinerzeroWidthJoinerzeroWidthNoBreakSpacezeroWidthNonJoinerzeroWidthSpaceUtilsformatJsonVariablesgetVariablesetVariableXMLformatXmlxmlEntityxmlToJsonXSScdataevalFromCodePointhasegawajsFuckmathmlrestrictedVectorssvgsvgScriptCommentternaryvectorsInput:0 0var interestingAttributes = List.of( AttributeType.STATUS_CODE, AttributeType.WORD_COUNT, AttributeType.LINE_COUNT, AttributeType.CONTENT_LENGTH, AttributeType.CONTENT_TYPE ); var currentValues = new LinkedHashMap<String, String>(); for (AttributeType interesting : interestingAttributes) { String value = ""; if (interesting == AttributeType.CONTENT_TYPE) { value = requestResponse.response().headerValue("Content-Type"); } else { var attributeValues = requestResponse.response().attributes(interesting); if (!attributeValues.isEmpty()) { value = String.valueOf(attributeValues.get(0).value()); } } currentValues.put(interesting.name(), value); } var jsonUtils = api.utilities().jsonUtils(); var key = "interesting-attributes"; var persisted = api.persistence().extensionData().getString(key); var oldValues = new HashMap<String, String>(); if (persisted != null && jsonUtils.isValidJson(persisted)) { for (String attr : currentValues.keySet()) { String oldValue = jsonUtils.readString(persisted, attr); if (oldValue != null) { oldValues.put(attr, oldValue); } } } boolean hasChanges = false; var changedOutput = new StringBuilder("-----\n"); for (var entry : currentValues.entrySet()) { String oldValue = oldValues.get(entry.getKey()); String newValue = entry.getValue(); if (!newValue.equals(oldValue)) { hasChanges = true; changedOutput.append(entry.getKey()).append(": ").append(newValue).append("\n"); } } if (hasChanges) { logging().logToOutput(changedOutput.append("-----").toString()); var jsonBuilder = new StringBuilder("{"); for (var it = currentValues.entrySet().iterator(); it.hasNext(); ) { var entry = it.next(); jsonBuilder.append("\"") .append(entry.getKey()) .append("\":\"") .append(entry.getValue().replace("\"", "\\\"")) .append("\""); if (it.hasNext()) jsonBuilder.append(","); } jsonBuilder.append("}"); api.persistence().extensionData().setString(key, jsonBuilder.toString()); }Output:0 0ClearClear tagsAutodecode← OutputSaveConvertExtrasDebugSelect inputSelect outputSend to HackPadHistory«←Jump to historyResetReset history (0 of 0)→»Error!