Skip to content

Colors & Styles not working with accents and other non-ascii characters #80

@Indigo744

Description

@Indigo744

Tested on the Legacy script (V1). I didn't test on the V2 version.

For a workaround, see below.

If a formatting value (be it for color or style) is using accent or other non-ascii characters, then the color or style won't be applied.

Since event log are localized, accented characters can appeared in the report (French in our case).

Given a formatting option below:

$FormattingParameters = @{
	Colors = @{
		Green = 'ajouté', 'activé' # 'added', 'activated'
	}
}

It does not highlight the word:
image

The issue is not linked to the file encoding, as UTF8-BOM is used and the accent is correctly encoded as we can see in the log:
image

The issue is related to the way the replace function is actually called:

Write-Color @WriteParameters -Text "[i] Preparing template ", "adding", " HTML ", "$($style.Name)", " tag for ", "$value", ' tags...' -Color White, Yellow, White, Yellow, White, Yellow -NoNewLine
$Body = $Body.Replace($value, "<$($style.Name)>$value</$($style.Name)>")
Write-Color -Text "Done" -Color "Green"

We can see the Replace function is called on the Body variable which contains the HTML body.

Accents (and others non-ascii characters) are usually html-encoded to avoid rendering issue.
We can quickly see this is indeed the case here when looking at the raw HTML output:
image

The solution would be to html-encode the color/style values before trying to replace them in the HTML body.

Workaround

For a simple workaround, simply drop these two lines before calling Start-ADReporting (assuming the formatting options are in the $FormattingParameters variable):

$FormattingParameters.Colors.clone().Keys | % { $FormattingParameters.Colors[$_] = $FormattingParameters.Colors[$_] | % { [System.Web.HttpUtility]::HtmlEncode([System.Web.HttpUtility]::HtmlDecode($_)) } }
$FormattingParameters.Styles.clone().Keys | % { $FormattingParameters.Styles[$_] = $FormattingParameters.Styles[$_] | % { [System.Web.HttpUtility]::HtmlEncode([System.Web.HttpUtility]::HtmlDecode($_)) } }

It simply iterates over all colors/styles values and html-encode them.
(Note that I left the HtmlDecode in case somebody run these lines multiple time)

With that, the colors and styles are now working 😸
image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions