Мне нужно преобразовать загруженные имена файлов с неизвестной кодировкой в Windows-1252, одновременно сохраняя совместимость с UTF-8.Преобразование кодирования PHP в Windows-1252 при сохранении совместимости UTF-8
Поскольку я передаю эти файлы контроллеру (на который я не влияю), файлы должны быть закодированы в Windows-1252. Затем этот контроллер генерирует список допустимых файлов (имен), которые хранятся через MySQL в базе данных, поэтому мне нужна совместимость с UTF-8. Имена файлов, переданные контроллеру, и имена файлов, записанные в базу данных, ДОЛЖНЫ совпадать. Все идет нормально.
В некоторых редких случаях при преобразовании в «Windows-1252» (например, с символом te «ï») символ преобразуется в нечто недопустимое в UTF-8. Затем MySQL удаляет эти недопустимые символы - в результате имена файлов на диске и имена файлов, хранящиеся в базе данных, больше не совпадают. Это преобразование, который failes иногда, достигаются с помощью простой перекодировки:
$sEncoding = mb_detect_encoding($sOriginalFilename);
$sTargetFilename = iconv($sEncoding, "Windows-1252//IGNORE", $sOriginalFilename);
Для предотвращения недопустимых символов, генерируемых преобразования, я снова могу удалить все недействительные UTF-8 символов из перекодировано строки:
ini_set('mbstring.substitute_character', "none");
$sEncoding = mb_detect_encoding($sOriginalFilename);
$sTargetFilename = iconv($sEncoding, "Windows-1252//TRANSLIT", $sOriginalFilename);
$sTargetFilename = mb_convert_encoding($sTargetFilename, 'UTF-8', 'Windows-1252');
Но это полностью удалит/перекодирует любые специальные символы, оставшиеся в строке. Например, я теряю все «äöüÄÖÜ» и т. Д., Которые довольно регулярны на немецком языке.
Если вы знаете более чистый и простой способ кодирования для Windows-1252 (без потери действительных специальных символов), сообщите мне.
Любая помощь очень ценится. Заранее спасибо!