set('HTML.Doctype', 'XHTML 1.0 Transitional'); $purifierConfig->set('URI.DisableExternalResources', false); $purifierConfig->set('URI.DisableResources', false); $purifierConfig->set('HTML.Allowed', 'u,a,p,p[style],b,i,small,blockquote,span[style],span[class],p,strong,em,li,ul,ol,div[align],br,img,figure,figcaption'); $purifierConfig->set('CSS.AllowedProperties', ['text-align', 'display', 'float', 'color', 'background-color', 'background', 'font-size', 'font-family', 'margin', 'margin-bottom', 'margin-left', 'margin-right', 'margin-top', 'padding', 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', 'text-decoration', 'font-weight', 'font-style', 'font-size', 'vertical-align', 'width', 'border-color', 'border-style']); $purifierConfig->set('CSS.AllowTricky', true); $purifierConfig->set('HTML.AllowedAttributes', 'target, rel, href, id, src, height, width, alt, class, *.style, dir'); $purifierConfig->set('HTML.ForbiddenAttributes', 'iframe@width,iframe@height'); $purifierConfig->set('Attr.AllowedFrameTargets', ['_blank', '_self', '_parent', '_top']); $purifierConfig->set('Attr.AllowedRel', ['noopener', 'nofollow']); $purifierConfig->set('HTML.SafeIframe', true); $purifierConfig->set('URI.SafeIframeRegexp', '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/)%'); $purifierConfig->set('Core.EscapeInvalidTags', $escape_invalid); $purifierConfig->set('AutoFormat.Linkify', true); $purifierConfig->set('HTML.DefinitionID', 'namelessmc'); $purifierConfig->set('HTML.DefinitionRev', 1); $purifierConfig->set('Cache.DefinitionImpl', null); if ($def = $purifierConfig->maybeGetRawHTMLDefinition()) { $def->addElement('figure', 'Block', 'Optional: (figcaption, Flow) | (Flow, figcaption) | Flow', 'Common'); $def->addElement('figcaption', 'Inline', 'Flow', 'Common'); } self::$_purifier = new HTMLPurifier($purifierConfig); } $purified = self::$_purifier->purify($input); if ($for_editor) { // Double encode < and > to prevent editor from parsing them return str_replace(['<', '>'], ['&lt;', '&gt;'], $purified); } return $purified; } /** * urlencode() a string without encoding slashes. * * @param string $input String to encode * @return string Encoded string */ public static function urlEncodeAllowSlashes(string $input): string { return str_replace('%2F', '/', urlencode($input)); } }