Sometimes in `mb_convert_encoding($str, 'UTF-8', 'auto')` that latest `auto` argument won't work.
To find what charset the string is using you can get all possible charsets, convert your `$str` into that charset and print it:
foreach(mb_list_encodings() as $charset) { echo mb_convert_encoding($str, 'UTF-8', $charset) . ' ----- ' . $chr . "\n"; 2 } }
This code may not work for some charsets returned by `mb_list_encodings()`. You can ignore some of them like this:
foreach(mb_list_encodings() as $charset) { if (in_array($chr, ['pass', 'wchar', 'byte2be', 'byte2le', 'byte4be', 'byte4le', 'BASE64', 'UUENCODE', 'HTML-ENTITIES', 'Quoted-Printable', '7bit', '8bit'])) { continue; } echo mb_convert_encoding($str, 'UTF-8', $charset) . ' ----- ' . $chr . "\n"; 2 } }
Of course it's only applicable if you know that `$str` will always be in the charset you found.