https://www.php.net/manual/fr/function.htmlentities.php troisième paramètre $encoding
https://www.php.net/manual/fr/function.utf8-decode.php Convertit une chaîne UTF-8 en ISO-8859-1
PS : si tu fais un locale -a en ssh tu as bien de l'UTF-8 dans la liste ?
PPS : à moins que tu ais une version php < 5.4 alors là ça explique tout, le charset de htmlentities est par défaut l'ISO-8859-1. Et dans ce cas il faudrait faire du htmlentities($string, ENT_COMPAT, 'UTF-8'). C'est important de bien lire la documentation des fonctions. ^^
Si omis, la valeur par défaut du paramètre encoding varie suivant la version PHP utilisée. En PHP 5.6.0 et suivants, l'option de configuration default_charset sera utilisée comme valeur par défaut. En PHP 5.4 et 5.5, UTF-8 sera la valeur par défaut. Pour les versions plus anciennes, PHP utilisera ISO-8859-1.