Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Indigo744 opened this issue Feb 9, 2024 · 0 comments

Comments

@Indigo744
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant