mb_detect_encoding operuje na tekście. Nie sprawdza czy jest to może tekst, który jest fragmentem odwiedzi HTTP, albo dokumentem HTML. Zwróć uwagę, że jako drugi parametr możesz podać kolejność w jakiej mają być sprawdzane kodowania - po prostu podaj UTF-8 przed ASCII. (notabene nigdy Ci tego ASCII nie wyświetli).
Jeżeli chcesz mieć pewność, że coś zakodowane jako Unikod zostanie rozpoznane jako Unikod, upewnij się, że w tekście występuje
BOM. Ale to tak naprawdę więcej problemów spowoduje niż rozwiąże.