У меня была похожая проблема, и я использовал флаг ENT_SUBSTITUTE, чтобы предотвратить пустую строку.Он по-прежнему не кодировался, и я не мог полагаться на файл UTF-8, поэтому я преобразовал кодировку только в строку:
$text = htmlentities(mb_convert_encoding($text, 'UTF-8', 'ASCII'), ENT_SUBSTITUTE, "UTF-8");