J'ai besoin de convertir les noms de fichiers téléchargés avec un encodage inconnu vers Windows-1252 tout en gardant la compatibilité UTF-8. Lorsque je transmets ces fichiers à un contrôleur (sur lequel je n'ai aucune influence), les fichiers doivent être codés sous Windows-1252. Ce contrôleur génère ensuite une liste de fichiers valides (noms) stockés via MySQL dans une base de données. J'ai donc besoin de la compatibilité UTF-8. Les noms de fichiers transmis au contrôleur et les noms de fichiers écrits dans la base de données DOIVENT correspondre. Jusqu'ici tout va bien.Conversion de codage PHP vers Windows-1252 tout en conservant la compatibilité UTF-8
Dans de rares cas, lors de la conversion en "Windows-1252" (comme avec le caractère "ï"), le caractère est converti en quelque chose de non valide en UTF-8. MySQL supprime ensuite ces caractères non valides - par conséquent, les noms de fichiers sur le disque et les noms de fichiers stockés dans la base de données ne correspondent plus. Cette conversion, qui failes parfois, est réalisée avec recodage simple:
$sEncoding = mb_detect_encoding($sOriginalFilename);
$sTargetFilename = iconv($sEncoding, "Windows-1252//IGNORE", $sOriginalFilename);
Pour éviter que des caractères non valides générés par la conversion, je puis à nouveau puis supprimer tous les caractères UTF-8 invalides de la chaîne recodé:
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');
Mais cela supprimera/recodera complètement tous les caractères spéciaux restant dans la chaîne. Par exemple, je perds tous les "äöüÄÖÜ" etc., qui sont assez réguliers en langue allemande.
Si vous connaissez une méthode d'encodage plus simple et plus simple pour Windows-1252 (sans perdre les caractères spéciaux valides), faites le moi savoir.
Toute aide est très appréciée. Merci d'avance!