Я пытаюсь автоматически конвертировать импортированные метаданные 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()));