Альтернатива mb_convert_encoding с кодировкой HTML-ENTITIES

У меня есть следующий код:

mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8'); 

Мне нужен альтернативный код, который делает то же самое, но не использует никаких функций mb_ * (расширение mb недоступно в некоторых средах).

я думал так

 utf8_decode(htmlentities($string, ENT_COMPAT, 'utf-8')); 

должен делать то же самое, но, к сожалению, это не так.

Я немного поиграл и нашел это очень интересным. Похоже, вторая часть также запускает «htmlspecialchars». Должна быть некоторая ошибка в mb_convert_encoding, поскольку htmlentities работает неправильно.

Если вы запустите htmlspecialchars_decode по результату, вы получите точно такое же, как если бы вы использовали mb_convert_encoding.

Код:

 $string = 'Test:!"$%&/()=ÖÄÜöäü<<'; echo mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8')."\n\n"; echo htmlspecialchars_decode(utf8_decode(htmlentities($string, ENT_COMPAT, 'utf-8', false))); 

Здесь приведена демо-версия кода: http://sandbox.onlinephpfunctions.com/code/715acade3b8337d9c9e48e58deee2a237015c259

И вот демо без htmlspecialchars_decode, чтобы показать вашу проблему: http://sandbox.onlinephpfunctions.com/code/5c4a32bf99aa8fd6246c4a77132a023d32945363