mb_detect_encoding
не знает, какова кодировка вашей строки. Это делает квалифицированное предположение, но нет никаких гарантий, что оно будет угадано правильно. Особенно, если все кандидаты являются однобайтовыми кодировками, как в случае с latin1 и latin5.
На самом деле ничто не заменит знание того, что вы делаете, если вы хотите получить правильные кодировки. Я предлагаю вам прочитать эти страницы хотя бы пару раз:
В частности, обратите внимание, что веб-страница обслуживается заголовком http, который указывает кодировку, с которой кодируется страница. Если вы явно не установите это из своего php-скрипта, вы будете использовать настройки веб-серверов по умолчанию, которые могут различаться в зависимости от сервера.
Кроме того, будьте осторожны, чтобы на самом деле понять, что происходит, а не делать проб и ошибок. Последний может легко получить что-то, что работает в каком-то контексте, но не в каждом контексте.
И наконец. Если у вас есть какой-либо выбор, я серьезно советую вам использовать utf-8 для всего. latin5 принесет вам много горя.