mb_detect_encoding обнаруживает ASCII как UTF-8?

Я пытаюсь автоматически конвертировать импортированные метаданные IPTC из изображений в UTF-8 для хранения в базе данных на mb_ функций PHP mb_ .

В настоящее время это выглядит так:

 $val = mb_convert_encoding($val, 'UTF-8', mb_detect_encoding($val)); 

Однако, когда mb_detect_encoding() предоставляется строка ASCII (специальные символы в латинских1 полях от 192-255), она обнаруживает ее как UTF-8, поэтому в следующей попытке конвертировать все в правильный UTF-8 все специальные символы удаляются ,

Я пробовал писать свой собственный метод, ища значения Latin1, и если бы не произошло, я бы продолжил, позволяя mb_detect_encoding решить, что это такое. Но я остановился на полпути, когда понял, что не могу быть уверен, что другие кодировки не используют одни и те же значения байтов для других вещей.

Итак, есть ли способ правильно определить ASCII для подачи на mb_convert_encoding в качестве исходной кодировки?

Задает индивидуальный заказ, где обнаружен ASCII.

 mb_detect_encoding($val, 'ASCII,UTF-8,ISO-8859-15'); 

Для полноты список доступных кодировок находится по адресу http://www.php.net/manual/en/mbstring.supported-encodings.php

Вы можете указать явно

 $val = mb_convert_encoding($val, 'UTF-8', 'ASCII'); 

РЕДАКТИРОВАТЬ:

 $val = mb_convert_encoding($val, 'UTF-8', 'auto'); 

Если вы не хотите беспокоиться о том, какие кодировки вы разрешите, вы можете добавить их все

$encoding = mb_detect_encoding($val, implode(',', mb_list_encodings()));