Image alt tag not saved if user inputs it
Using the htmlpurifier 4.12 with Drupal 9.5.11. We have a text format configured with the following:
Attr: AllowedClasses: null AllowedFrameTargets: "_blank, _self, _parent, _top" AllowedRel: { } AllowedRev: { } ClassUseCDATA: null DefaultImageAlt: null DefaultInvalidImage: '' DefaultInvalidImageAlt: 'Invalid image' DefaultTextDir: ltr EnableID: true ForbiddenClasses: { } ID.HTML5: true IDBlacklist: { } IDBlacklistRegexp: null IDPrefix: '' IDPrefixLocal: '' AutoFormat: AutoParagraph: false Custom: { } DisplayLinkURI: false Linkify: false PurifierLinkify.DocURL: '#%s' PurifierLinkify: false RemoveEmpty.Predicate: colgroup: { } th: { } td: { } iframe: - src RemoveEmpty.RemoveNbsp.Exceptions: td: true th: true RemoveEmpty.RemoveNbsp: false RemoveEmpty: false RemoveSpansWithoutAttributes: false CSS: AllowDuplicates: false AllowImportant: false AllowTricky: false AllowedFonts: null AllowedProperties: null DefinitionRev: 1 ForbiddenProperties: { } MaxImgLength: 1200px Proprietary: false Trusted: false Cache: DefinitionImpl: Serializer SerializerPath: null SerializerPermissions: 493 Core: AggressivelyFixLt: true AggressivelyRemoveScript: true AllowHostnameUnderscore: false AllowParseManyTags: false CollectErrors: false ColorKeywords: aliceblue: '#F0F8FF' antiquewhite: '#FAEBD7' aqua: '#00FFFF' aquamarine: '#7FFFD4' azure: '#F0FFFF' beige: '#F5F5DC' bisque: '#FFE4C4' black: '#000000' blanchedalmond: '#FFEBCD' blue: '#0000FF' blueviolet: '#8A2BE2' brown: '#A52A2A' burlywood: '#DEB887' cadetblue: '#5F9EA0' chartreuse: '#7FFF00' chocolate: '#D2691E' coral: '#FF7F50' cornflowerblue: '#6495ED' cornsilk: '#FFF8DC' crimson: '#DC143C' cyan: '#00FFFF' darkblue: '#00008B' darkcyan: '#008B8B' darkgoldenrod: '#B8860B' darkgray: '#A9A9A9' darkgrey: '#A9A9A9' darkgreen: '#006400' darkkhaki: '#BDB76B' darkmagenta: '#8B008B' darkolivegreen: '#556B2F' darkorange: '#FF8C00' darkorchid: '#9932CC' darkred: '#8B0000' darksalmon: '#E9967A' darkseagreen: '#8FBC8F' darkslateblue: '#483D8B' darkslategray: '#2F4F4F' darkslategrey: '#2F4F4F' darkturquoise: '#00CED1' darkviolet: '#9400D3' deeppink: '#FF1493' deepskyblue: '#00BFFF' dimgray: '#696969' dimgrey: '#696969' dodgerblue: '#1E90FF' firebrick: '#B22222' floralwhite: '#FFFAF0' forestgreen: '#228B22' fuchsia: '#FF00FF' gainsboro: '#DCDCDC' ghostwhite: '#F8F8FF' gold: '#FFD700' goldenrod: '#DAA520' gray: '#808080' grey: '#808080' green: '#008000' greenyellow: '#ADFF2F' honeydew: '#F0FFF0' hotpink: '#FF69B4' indianred: '#CD5C5C' indigo: '#4B0082' ivory: '#FFFFF0' khaki: '#F0E68C' lavender: '#E6E6FA' lavenderblush: '#FFF0F5' lawngreen: '#7CFC00' lemonchiffon: '#FFFACD' lightblue: '#ADD8E6' lightcoral: '#F08080' lightcyan: '#E0FFFF' lightgoldenrodyellow: '#FAFAD2' lightgray: '#D3D3D3' lightgrey: '#D3D3D3' lightgreen: '#90EE90' lightpink: '#FFB6C1' lightsalmon: '#FFA07A' lightseagreen: '#20B2AA' lightskyblue: '#87CEFA' lightslategray: '#778899' lightslategrey: '#778899' lightsteelblue: '#B0C4DE' lightyellow: '#FFFFE0' lime: '#00FF00' limegreen: '#32CD32' linen: '#FAF0E6' magenta: '#FF00FF' maroon: '#800000' mediumaquamarine: '#66CDAA' mediumblue: '#0000CD' mediumorchid: '#BA55D3' mediumpurple: '#9370DB' mediumseagreen: '#3CB371' mediumslateblue: '#7B68EE' mediumspringgreen: '#00FA9A' mediumturquoise: '#48D1CC' mediumvioletred: '#C71585' midnightblue: '#191970' mintcream: '#F5FFFA' mistyrose: '#FFE4E1' moccasin: '#FFE4B5' navajowhite: '#FFDEAD' navy: '#000080' oldlace: '#FDF5E6' olive: '#808000' olivedrab: '#6B8E23' orange: '#FFA500' orangered: '#FF4500' orchid: '#DA70D6' palegoldenrod: '#EEE8AA' palegreen: '#98FB98' paleturquoise: '#AFEEEE' palevioletred: '#DB7093' papayawhip: '#FFEFD5' peachpuff: '#FFDAB9' peru: '#CD853F' pink: '#FFC0CB' plum: '#DDA0DD' powderblue: '#B0E0E6' purple: '#800080' rebeccapurple: '#663399' red: '#FF0000' rosybrown: '#BC8F8F' royalblue: '#4169E1' saddlebrown: '#8B4513' salmon: '#FA8072' sandybrown: '#F4A460' seagreen: '#2E8B57' seashell: '#FFF5EE' sienna: '#A0522D' silver: '#C0C0C0' skyblue: '#87CEEB' slateblue: '#6A5ACD' slategray: '#708090' slategrey: '#708090' snow: '#FFFAFA' springgreen: '#00FF7F' steelblue: '#4682B4' tan: '#D2B48C' teal: '#008080' thistle: '#D8BFD8' tomato: '#FF6347' turquoise: '#40E0D0' violet: '#EE82EE' wheat: '#F5DEB3' white: '#FFFFFF' whitesmoke: '#F5F5F5' yellow: '#FFFF00' yellowgreen: '#9ACD32' ConvertDocumentToFragment: true DirectLexLineNumberSyncInterval: 0 DisableExcludes: false EnableIDNA: false Encoding: utf-8 EscapeInvalidChildren: false EscapeInvalidTags: false EscapeNonASCIICharacters: false HiddenElements: script: true style: true Language: en LegacyEntityDecoder: false LexerImpl: null MaintainLineNumbers: null NormalizeNewlines: true RemoveInvalidImg: true RemoveProcessingInstructions: false RemoveScriptContents: true Filter: Custom: { } ExtractStyleBlocks.Escaping: true ExtractStyleBlocks.Scope: null ExtractStyleBlocks.TidyImpl: null ExtractStyleBlocks: false YouTube: false HTML: Allowed: null AllowedAttributes: "*.style, *.id, *.class, img.src, table.cellspacing, table.cellpadding, *.border, td.rowspan, td.colspan, a.href, a.name, a.title, a.target, blockquote.cite, ol.start, ol.type, img.alt, img.width, img.height, img.data-mid, *.dir, *.lang" AllowedComments: { } AllowedCommentsRegexp: null AllowedElements: a, b, i, em, strong, u, span, cite, blockquote, code, ul, ol, li, dl, dt, dd, div, address, h1, h2, h3, h4, h5, h6, s, sup, sub, img, table, caption, tbody, thead, tfoot, th, td, tr, hr, p, br, pre, drupal-entity, figure, figcaption AllowedModules: null Attr.Name.UseCDATA: false BlockWrapper: p CoreModules: Structure: true Text: true Hypertext: true List: true NonXMLCommonAttributes: true XMLCommonAttributes: true CommonAttributes: true CustomDoctype: null DefinitionID: HTMLPurifier_HTML5Config DefinitionRev: 2019080701 Doctype: HTML5 FlashAllowFullScreen: false ForbiddenAttributes: { } ForbiddenElements: { } MaxImgLength: 1200 Nofollow: false Parent: div Proprietary: false SafeEmbed: false SafeIframe: false SafeObject: false SafeScripting: { } Strict: false TargetBlank: false TargetNoopener: true TargetNoreferrer: true TidyAdd: { } TidyLevel: medium TidyRemove: { } Trusted: false XHTML: true IframeAllowFullscreen: false Output: CommentScriptContents: true FixInnerHTML: true FlashCompat: false Newline: null SortAttr: false TidyFormat: false Test: ForceNoIconv: false URI: AllowedSchemes: http: true https: true mailto: true ftp: true nntp: true news: true tel: true Base: null DefaultScheme: http DefinitionID: null DefinitionRev: 1 Disable: false DisableExternal: false DisableExternalResources: false DisableResources: false Host: null HostBlacklist: { } MakeAbsolute: false Munge: null MungeResources: false MungeSecretKey: null OverrideAllowedSchemes: true SafeIframeRegexp: null
When a user adds or edits an image and adds or replaces alt text, the alt text does not get saved and always defaults to the original images alt text when it was first created.
If I change to a new text format that does not use the htmlpurifier, the images alt text works as I would expect.
Can you please advise if there is a missing configuration or something within the configuration that needs to be changed for it to work properly?