Pourtant j'ai bon caractère ...
Résolu
danielos77
Messages postés
108
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je souhaitais utiliser dans un code pour uploader des fichiers la fonction sur les chaines de caractères (https://www.php.net/manual/fr/function.strtr.php) avec le passage suivant pour nettoyer le nom des fichiers.
Au départ, j'ai un nom de fichier qui est Hà_â_é_è_ê_ö_nri.pdf et à l'arrivée j'ai Hyy_y�_y�_y�_y�_y�_nri.pdf.
Le 'à' est devenu 'yy' et tous les autres caractères accentués des 'y�'.
Pourtant, dans la partie head HTML du formulaire, j'ai bien une balise <meta charset="UTF-8">. et pour être sûr que dans le php j'ai aussi de l'utf-8, j'ai mis la ligne : utf8_encode ($filename); avant les lignes pour remplacer les caractères accentués.
Mais cela est sans effet.
Au début, j'ai pensé que c'était juste l'encodage du texte à l'affichage sur mon écran ... mais le fichier est bien enregistré avec ces caractères chez l'hébergeur.
Je viens, par acquis de confiance, de faire des echo juste avant et juste après la fonction, et j'ai bien "Hà_â_é_è_ê_ö_nri.pdf" avant et "Hyy_y�_y�_y�_y�_y�_nri.pdf" après. Je ne pense pas que redonner au string de sortie le même nom que celui de l'entrée soit en cause. Et je fais confiance à cette fonction issue du manuel.
La gestion des erreurs , débogage et écriture du code php que j'ai bien lu ne m'aide guère sur ce coup là.
A la limite, c'est pas dramatique, je peux laisser les caractères accentués ;-(
Daniel
--
Je souhaitais utiliser dans un code pour uploader des fichiers la fonction sur les chaines de caractères (https://www.php.net/manual/fr/function.strtr.php) avec le passage suivant pour nettoyer le nom des fichiers.
// Formate le nom du fichier en remplaçant les caractères accentués. $filename = strtr($filename, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); // En remplaçant les caractères autres que l'alphabet par des tirets A FAIRE PLUS TARD // $filename = preg_replace('#([^.a-z0-9]+)#i', '-', $filename);
Au départ, j'ai un nom de fichier qui est Hà_â_é_è_ê_ö_nri.pdf et à l'arrivée j'ai Hyy_y�_y�_y�_y�_y�_nri.pdf.
Le 'à' est devenu 'yy' et tous les autres caractères accentués des 'y�'.
Pourtant, dans la partie head HTML du formulaire, j'ai bien une balise <meta charset="UTF-8">. et pour être sûr que dans le php j'ai aussi de l'utf-8, j'ai mis la ligne : utf8_encode ($filename); avant les lignes pour remplacer les caractères accentués.
Mais cela est sans effet.
Au début, j'ai pensé que c'était juste l'encodage du texte à l'affichage sur mon écran ... mais le fichier est bien enregistré avec ces caractères chez l'hébergeur.
Je viens, par acquis de confiance, de faire des echo juste avant et juste après la fonction, et j'ai bien "Hà_â_é_è_ê_ö_nri.pdf" avant et "Hyy_y�_y�_y�_y�_y�_nri.pdf" après. Je ne pense pas que redonner au string de sortie le même nom que celui de l'entrée soit en cause. Et je fais confiance à cette fonction issue du manuel.
La gestion des erreurs , débogage et écriture du code php que j'ai bien lu ne m'aide guère sur ce coup là.
A la limite, c'est pas dramatique, je peux laisser les caractères accentués ;-(
Daniel
Configuration: Windows / Firefox 75.0 / PHP 7.2.24
--
A voir également:
- Pourtant j'ai bon caractère ...
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Caractere vide - Guide
- Caractere speciaux mac - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, cela ne fonctionne pas bien avec UTF-8, qui utilise plusieurs octets par caractères.
as-tu essayé ainsi:
as-tu essayé ainsi:
$table = array( 'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r', ); strtr($string, $table);
Bonjour,
Lorsque l'on a des soucis d'encodage ( utf8), il faut commencer par vérifier que tout est conforme (aussi bien au niveau de l'encodage du fichier lui même... que dans la chaine de connexion à la bdd et le charset défini sur les pages.)
Tout est expliqué ici :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
.
Lorsque l'on a des soucis d'encodage ( utf8), il faut commencer par vérifier que tout est conforme (aussi bien au niveau de l'encodage du fichier lui même... que dans la chaine de connexion à la bdd et le charset défini sur les pages.)
Tout est expliqué ici :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
.
Bonjour Jordane45,
Mon encode du fichier est bien en UTF-8 (c'est écrit en gros en haut dans le bandeau).
Pour développer la partie du script, j'ai mis en commentaire toutes les connexions à la bdd et les fonctions mail().
Pour la Bdd, j'ai juste déclaré une variable fixe dans la page qui envoie le _GET.
La déclaration de l'encodage dans les pages est fait.
L'instruction 'utf8_encode ($filename);' a été mise ne commentaire après avoir vu que ça ne fonctionnait pas.
Je pense donc que les prérogatives 'Html/Php -caractères accentués et l'UTF8' sont bien suivies de ce côté.
Cordialement,
Daniel
--
Mon encode du fichier est bien en UTF-8 (c'est écrit en gros en haut dans le bandeau).
Pour développer la partie du script, j'ai mis en commentaire toutes les connexions à la bdd et les fonctions mail().
Pour la Bdd, j'ai juste déclaré une variable fixe dans la page qui envoie le _GET.
La déclaration de l'encodage dans les pages est fait.
L'instruction 'utf8_encode ($filename);' a été mise ne commentaire après avoir vu que ça ne fonctionnait pas.
Je pense donc que les prérogatives 'Html/Php -caractères accentués et l'UTF8' sont bien suivies de ce côté.
Cordialement,
Daniel
--
Tu ne bosserai pas en local sur ton ordi par hasard ? un windows ?
Regarde ceci : https://blog.garr.co.uk/php/2015/09/22/php-windows-and-utf-8-filenames.html
Regarde ceci : https://blog.garr.co.uk/php/2015/09/22/php-windows-and-utf-8-filenames.html
Non, je suis directement sur le site de l'hébergeur.
Mais merci pour ce lien, je vais le lire (ou du moins essayer de comprendre les grandes lignes car mon anglais date d'il y a 50 ans environ.
Sinon, la solution de yg_be fonctionne (je viens de tester). Il aurait fallu savoir que les caractère UTF-8 >1octet et donc passer par la fonction en 2 éléments.
Je vais passer la discussion en résolu.
Merci encore surtout pour les connaissances apportées et les progrès que vous me faites faire.
Daniel
Mais merci pour ce lien, je vais le lire (ou du moins essayer de comprendre les grandes lignes car mon anglais date d'il y a 50 ans environ.
Sinon, la solution de yg_be fonctionne (je viens de tester). Il aurait fallu savoir que les caractère UTF-8 >1octet et donc passer par la fonction en 2 éléments.
Je vais passer la discussion en résolu.
Merci encore surtout pour les connaissances apportées et les progrès que vous me faites faire.
Daniel
Non, j'ai pas essayé avec un tableau. Je vais tester.
Merci
Daniel
Merci encore.