diff --git a/public/main/inc/lib/internationalization.lib.php b/public/main/inc/lib/internationalization.lib.php index c4987f3e44d..0433bccb332 100644 --- a/public/main/inc/lib/internationalization.lib.php +++ b/public/main/inc/lib/internationalization.lib.php @@ -1020,18 +1020,19 @@ function api_to_system_encoding($string, $from_encoding = null, $check_utf8_vali * * @see http://php.net/manual/en/function.htmlentities */ -function api_htmlentities($string, $quote_style = ENT_COMPAT) +function api_htmlentities($string, $quote_style = ENT_COMPAT): string { - switch ($quote_style) { - case ENT_COMPAT: - $string = str_replace(['&', '"', '<', '>'], ['&', '"', '<', '>'], $string); - break; - case ENT_QUOTES: - $string = str_replace(['&', '\'', '"', '<', '>'], ['&', ''', '"', '<', '>'], $string); - break; + $flags = ENT_HTML401; + + if ($quote_style === ENT_QUOTES) { + $flags |= ENT_QUOTES; + } else { + $flags |= ENT_COMPAT; } - return mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-8'); + $flags |= ENT_SUBSTITUTE; + + return htmlentities($string, $flags, 'UTF-8'); } /**