Важно передать набор символов в функцию htmlentities, так как по умолчанию ISO-8859-1:
utf8_encode(htmlentities($source,ENT_COMPAT,'utf-8'));
Сначала вы должны применить htmlentities, чтобы позволить utf8_encode правильно кодировать сущности.
(РЕДАКТИРОВАТЬ: я изменил свое мнение до того, что на основании комментариев порядок не имеет значения. Этот код протестирован и хорошо работает).